Как лучше использовать KeyDown Event Validation? - PullRequest
1 голос
/ 18 января 2012

У меня есть несколько TextBox, которые должны разрешать только числовые вводы. Проблема в том, что мне нужно скопировать и вставить приведенный ниже код для другого TextBox, который допускает только числовые значения. Есть ли более простой способ реализации? такие как использование функций или наследование?

private void txtCheckVoucher_Amount_KeyDown(object sender, KeyEventArgs e)
{
     if (Control.ModifierKeys == Keys.Shift)
     {
           e.SuppressKeyPress = true;
           return;
     }

     if (((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) ||
             (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) ||
              e.KeyCode == Keys.Decimal || e.KeyCode == Keys.OemPeriod ||
              e.KeyCode == Keys.Back || e.KeyCode == Keys.Tab ||
              e.KeyCode == Keys.Left || e.KeyCode == Keys.Right ||
              e.KeyCode == Keys.End || e.KeyCode == Keys.Home ||
              e.KeyCode == Keys.ShiftKey || e.KeyCode == Keys.Delete))
     {

     }
     else if (e.KeyCode >= Keys.A || e.KeyCode <= Keys.Z)
              e.SuppressKeyPress = true;
}

Ответы [ 4 ]

3 голосов
/ 18 января 2012

Вы можете сделать это тремя способами

  1. У вас может быть общая функция, которая будет проверять, введенный ключ действителен или нет. И вы вызываете эту функцию из всех обработчиков событий нажатия клавиш. Это подходит, если у вас есть текстовое поле на разных формах.
  2. Если все текстовые поля имеют одинаковую форму, в этом случае, привязайте все обработчики событий нажатия клавиш к одной и той же функции.
  3. Вы можете настроить свой текстовый элемент управления, который будет принимать только необходимые ключи. Проверьте этот пост, он может вам помочь.

Как правило, вы можете получить идентификатор / имя элемента управления текстовым полем с помощью ((System.Windows.Forms.Control)(sender)).Name

Надеюсь, это поможет.

1 голос
/ 18 января 2012

Вы можете вызвать txtCheckVoucher_Amount_KeyDown () из события KeyDown всех других текстовых полей.

1 голос
/ 18 января 2012

Если для текстовых полей требуется одинаковая логика событий KeyDown, почему бы просто не подписать оба текстовых поля на один и тот же обработчик событий?

Вы можете просто установить для события KeyDown тот же метод txtCheckVoucher_Amount_KeyDown ().

0 голосов
/ 18 января 2012

Простое Назначение одного и того же события KeyDown txtCheckVoucher_Amount_KeyDown() всем текстовым полям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...