Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > textBoxS_KeyPress


Автор: C4EBA 31.5.2010, 17:55
Код

        private void textBoxS_KeyPress(object sender, KeyPressEventArgs e)
      {
        if (e.KeyChar==',')
        {
        e.KeyChar='.';
        }
        if (!Char.IsDigit(e.KeyChar)&&e.KeyChar!=(char)Keys.Back)
        {
          if (e.KeyChar!='.'||textBoxS.Text.IndexOf(".")!=-1)
          {
            e.Handled=true;
          }
        }
      }


Без строчки  
Код

if (e.KeyChar!='.'||textBoxS.Text.IndexOf(".")!=-1)


которая запрещает вводить больше одной точки, код  для textBoxS_KeyPress можно было использовать для нескольких textBox-ов. А с этой строчкой его нужно писать для каждого textBox-а.
Нельзя ли как-то по другому запретить введение больше одной точки, чтобы код не содержал указание на конкретный textBox?




Автор: NightmareZ 31.5.2010, 20:50
Цитата(C4EBA @  31.5.2010,  17:55 Найти цитируемый пост)
Нельзя ли как-то по другому запретить введение больше одной точки, чтобы код не содержал указание на конкретный textBox?


А этот код и не привязан к конкретному TextBox'у. Просто назначь это событие всем нужным TextBox'ам.

Автор: C4EBA 1.6.2010, 08:41
Цитата(NightmareZ @  31.5.2010,  20:50 Найти цитируемый пост)
 Просто назначь это событие всем нужным TextBox'ам.


Вначале я так и сделал. Но когда, проверяя работу программы, вводил в textBoxS число с десятичным разделителем, то в другие textBox-ы ввести числа с десятичным разделителем не удавалось. Удалял точку из textBoxS - можно было ввести в любой другой textBox точку.
Когда переписал код для каждого textBox-а - все заработало.

Цитата(NightmareZ @  31.5.2010,  20:50 Найти цитируемый пост)
А этот код и не привязан к конкретному TextBox'у. 


Как же не привязан? textBoxS.Text.IndexOf(.... - ведь тут конкретно указано: textBox с именем S.
А у меня есть textBoxD, textBoxL, textBoxP и другие.

Автор: A5uKa 1.6.2010, 09:04
sender

Автор: C4EBA 1.6.2010, 09:30
Цитата(A5uKa @  1.6.2010,  09:04 Найти цитируемый пост)
sender

A5uKa, а нельзя ли поподробнее? Как должен выглядеть код, который я привел в своем первом сообщении? Что и как в нем нужно изменить? 

Автор: A5uKa 1.6.2010, 09:53
Цитата

Как же не привязан? textBoxS.Text.IndexOf(.... - ведь тут конкретно указано: textBox с именем S.


Код

((TextBox)sender).Text.IndexOf(

Автор: C4EBA 1.6.2010, 10:16
Спасибо, A5uKa. Попробовал, как ты предлагаешь - работает.
Привожу исправленный код с пояснениями:

Код

        private void textBoxS_KeyPress(object sender, KeyPressEventArgs e)
      {
// если вводят запятую - она меняется на точку:
        if (e.KeyChar==',')
        {
        e.KeyChar='.';
        }
// разрешается ввод только цифр и БэкСпейс:
        if (!Char.IsDigit(e.KeyChar)&&e.KeyChar!=(char)Keys.Back)
        {
// запрет на ввод более одной десятичной точки:
          if(e.KeyChar != '.' || ((TextBox)sender).Text.IndexOf(".") != -1)
           {
            e.Handled=true;
          }
        }
      }

Автор: A5uKa 1.6.2010, 10:35
^__^

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)