Позвольте только алфавитно-цифровой в текстовом поле

Если вы используете NewRelic, обновите его как минимум до 5.21.1.

16
задан Sildoreth 6 April 2015 в 15:36
поделиться

6 ответов

private void _txtPath_KeyDown(object sender, KeyEventArgs e)
  {
     if ((e.Key < Key.A) || (e.Key > Key.Z))
        e.Handled = true;
  }
2
ответ дан 30 November 2019 в 15:06
поделиться

Я думаю, что стоит подумать о фильтрации события TextChanged TextBox. Вы можете создать операцию, которая избавит вашу текстовую строку от недопустимых символов. Это немного сложнее, чем блокировать событие KeyDown.

Но я думаю, что это правильный путь, потому что вы не блокируете встроенные в WPF механизмы обработки событий KeyDown / Up, поэтому копирование / вставка по-прежнему работает. Вы бы работали на более высоком уровне абстракций, поэтому я думаю, вам будет легче понять, что происходит.

3
ответ дан 30 November 2019 в 15:06
поделиться

Я знаю, что в winForms есть элемент управления MaskedTextBox, что позволяет вам указывать именно такие вещи. Я не знаю WPF, поэтому не знаю, доступен ли он там, но если он есть, сделайте это. Это НАМНОГО проще, чем все эти нажатия клавиш и события, и к тому же более надежное.

2
ответ дан 30 November 2019 в 15:06
поделиться

Используйте регулярное выражение для фильтрации других символов. Или используйте методы Char.IsDigit, IsXXX, чтобы отфильтровать нежелательные символы. Есть множество способов сделать это.

Обновление: если вы должны использовать KeyDown, то кажется, что вам также нужно обработать KeyPressed и установить obEventArgs.Handled = true, чтобы запретить символы. См. Пример на странице KeyDown MSDN.

Обновление: теперь, когда вы указываете это WPF. Приведенный ниже код позволяет вводить в текстовое поле только символы az и AZ. Расширить по мере необходимости ...

private void _txtPath_KeyDown(object sender, KeyEventArgs e)
      {
         if ((e.Key < Key.A) || (e.Key > Key.Z))
            e.Handled = true;
      }

Это сломается, если вы скопируете и вставите материал в текстовое поле. Проверяйте весь текст, как только пользователь покидает элемент управления или когда он нажимает OK / Отправить, как сообщает MusicGenesis.

9
ответ дан 30 November 2019 в 15:06
поделиться

Handling the KeyDown or KeyPress events is one way to do this, but programmers usually forget that a user can still copy-and-paste invalid text into the textbox.

A somewhat better way is to handle the TextChanged event, and strip out any offending characters there. This is a bit more complicated, as you have to keep track of the caret position and re-set it to the appropriate spot after changing the box's Text property.

Depending on your application's needs, I would just let the user type in whatever they want, and then flag the textbox (turn the text red or something) when the user tries to submit.

31
ответ дан 30 November 2019 в 15:06
поделиться

and your regExp could look like [0-9a-zA-Z]* to allow only English alphanumeric chracters

1
ответ дан 30 November 2019 в 15:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: