Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация однотипной процедуры для группы контрол 
V
    Опции темы
shurokan
Дата 14.6.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.7.2007

Репутация: нет
Всего: нет



Плаваю очень сильно, так-что, для меня методы, интерфейсы, классы.... одно и тоже.
Есть следующее свойстов для maskedTextBox, но если у меня будет этих maskedTextBox много, как мне
реализовать в одном экземпляре, а потом подставлять вместо maskedTextBox1 - maskedTextBox2 и т.д. Подскажите, хоть в каком направлении рыть.
 
Код
private void maskedTextBox1_TextChanged(object sender, EventArgs e)
        {
            string text;            
            double f;

            if (maskedTextBox1.TextLength == 0)
            {                 
            }
            else
            {
                text = maskedTextBox1.Text;
                if (double.TryParse(text, out f))
                {
                    f = double.Parse(text);
                    text = f.ToString();                                 
                }
                else
                {                    

                    maskedTextBox1.Text = text.Remove(text.Length - 1);
                    maskedTextBox1.SelectionStart = maskedTextBox1.TextLength + 1;
                    maskedTextBox1.SelectionLength = 0;
                }
            }
        }


PM MAIL   Вверх
Heinzz
Дата 14.6.2009, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 3
Всего: 9



Создать один метод в который будет передан вызвавший его объект.

Код

private void OnlyNumbers(MaskedTextBox tb)
        {
            string text;
            double f;
            if (maskedTextBox1.TextLength == 0)
            {
            }
            else
            {
                text = maskedTextBox1.Text;
                if (double.TryParse(text, out f))
                {
                    f = double.Parse(text);
                    text = f.ToString();
                }
                else
                {
                    maskedTextBox1.Text = text.Remove(text.Length - 1);
                    maskedTextBox1.SelectionStart = maskedTextBox1.TextLength + 1;
                    maskedTextBox1.SelectionLength = 0;
                }
            }

        }

        private void maskedTextBox1_TextChanged(object sender, EventArgs e)
        {
            OnlyNumbers((MaskedTextBox)sender);    
            
        }

        private void maskedTextBox2_TextChanged(object sender, EventArgs e)
        {
            OnlyNumbers((MaskedTextBox)sender);
        }





--------------------
user posted image
PM MAIL   Вверх
shurokan
Дата 15.6.2009, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.7.2007

Репутация: нет
Всего: нет



Heinzz, код работает только для maskedTextBox1, а для maskedTextBox2 - не работает. 

Код
private void OnlyDigits(MaskedTextBox tb)
        {
            string text;
            double f;

            if (tb.TextLength == 0)
            {
            }
            else
            {
                text = tb.Text;
                if (double.TryParse(text, out f))
                {
                    f = double.Parse(text);
                    text = f.ToString();
                }
                else
                {
                    tb.Text = text.Remove(text.Length - 1);
                    maskedTextBox2.SelectionStart = tb.TextLength + 1;
                    tb.SelectionLength = 0;
                }
            }
        }



Heinzz, сенкс!

Это сообщение отредактировал(а) shurokan - 15.6.2009, 02:45
PM MAIL   Вверх
DVariuS
Дата 15.6.2009, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 10.2.2009
Где: Ukraine

Репутация: 2
Всего: 8



Цитата(shurokan @  15.6.2009,  02:17 Найти цитируемый пост)
Heinzz, код работает только для maskedTextBox1, а для maskedTextBox2 - не работает. 

Не работает, потому что метод 
Код

private void maskedTextBox1_TextChanged(object sender, EventArgs e)

не свойство, а обработчик события TextChanged для объекта maskedTextBox1. Для того, чтобы работал код Heinzz, необходимо добавить в метод InitializeComponent() формы следующий код:
Код

this.maskedTextBox2.TextChanged += new System.EventHandler(maskedTextBox2_TextChanged);

Эта строка привяжет к событию TextChanged твой обработчик maskedTextBox2_TextChanged.


Цитата(shurokan @  14.6.2009,  19:07 Найти цитируемый пост)
Плаваю очень сильно, так-что, для меня методы, интерфейсы, классы.... одно и тоже.

Тогда как ты вообще собираешься программировать? Изучай теорию, тренируйся на консоли, а уже потом переходи к WF - и ты поймешь, насколько все на самом деле просто  smile 
PM MAIL   Вверх
Heinzz
Дата 15.6.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 3
Всего: 9



Извиняюсь, допустил неточность: в методе OnlyNumbers все действия с входящим параметром "tb", а не  "maskedTextBox1".

Код

private void OnlyNumbers(MaskedTextBox tb)
        {
            string text;
            double f;
            if (tb.TextLength == 0)
            {
            }
            else
            {
                text = tb.Text;
                if (double.TryParse(text, out f))
                {
                    f = double.Parse(text);
                    text = f.ToString();
                }
                else
                {
                    tb.Text = text.Remove(text.Length - 1);
                    tb.SelectionStart = tb.TextLength + 1;
                    tb.SelectionLength = 0;
                }
            }
        }


        private void maskedTextBox1_TextChanged(object sender, EventArgs e)
        {
            OnlyNumbers((MaskedTextBox)sender);    
            
        }
        private void maskedTextBox2_TextChanged(object sender, EventArgs e)
        {
            OnlyNumbers((MaskedTextBox)sender);
        }



+

Цитата(DVariuS @  15.6.2009,  08:25 Найти цитируемый пост)
код C#
1:
this.maskedTextBox2.TextChanged += new System.EventHandler(maskedTextBox2_TextChanged);

Эта строка привяжет к событию TextChanged твой обработчик maskedTextBox2_TextChanged.


либо если не хочется это писать, добавляйте реакцию на события через свойства текстбокса в редакторе.
 


--------------------
user posted image
PM MAIL   Вверх
shurokan
Дата 15.6.2009, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.7.2007

Репутация: нет
Всего: нет



Heinzz насчет tb, смотри мой пост выше, там я выклал из заменой. Все остальное, как в твоем первом посте, пашет и без привязки с помощью
Код
this.maskedTextBox2.TextChanged += new System.EventHandler(maskedTextBox2_TextChanged);


Я так понимаю, этот метод - OnlyNumbers((MaskedTextBox)sender)  посылает обработку события с параметром текущего MaskedTextBox. Так для чего тогда нужно делать привязку с помощью this? Вроде у меня все и так работает. Или я чегото не учел?

DVariuS , я всегда был сторонником практики, тем более формы дают много разных ситуаций которые нужно учитывать, не то, что консольные приложения. А теорию я почитываю smile
PM MAIL   Вверх
Heinzz
Дата 15.6.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 12.12.2008
Где: .net

Репутация: 3
Всего: 9




Цитата(shurokan @  15.6.2009,  15:35 Найти цитируемый пост)
Вроде у меня все и так работает

Если и так работает, значит строка
Цитата(shurokan @  15.6.2009,  15:35 Найти цитируемый пост)
код C#
1:
this.maskedTextBox2.TextChanged += new System.EventHandler(maskedTextBox2_TextChanged);
 была сгенерированна студией автоматически когда щелкнул на таблице событий контрола.



--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0657 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.