Подтвердить что ты не робот

WPF Key - это цифра или номер

У меня есть метод previewKeyDown в моем окне, и я хотел бы знать, что нажатая клавиша - это только A-Z letter или 1-0 number (без anyF1..12, enter, ctrl, alt и т.д. - буква или номер).

Я пробовал Char.IsLetter, но мне нужно дать char, поэтому e.key.ToString()[0] не работает, потому что это почти каждый раз письмо.

4b9b3361

Ответ 1

Что-то вроде этого будет делать:

if ((e.Key >= Key.A && e.Key <= Key.Z) || (e.Key >= Key.D0 && e.Key <= Key.D9) || (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9))

Конечно, вам также нужно будет проверить, не нажимаются ли клавиши-модификаторы, такие как CTRL, в соответствии с вашими требованиями.

Ответ 2

e.Key дает вам член enum System.Windows.Input.Key

Вы можете сделать следующее, чтобы определить, является ли это буквой или числом:

var isNumber = e.Key >= Key.D0 && e.Key <= Key.D9;
var isLetter = e.Key >= Key.A && e.Key <= Key.Z;

Ответ 3

В вашем конкретном случае ответ, предоставленный Jon и Jeffery, вероятно, лучше всего, однако, если вам нужно для проверки вашей строки для какой-либо другой логики букв и цифр, вы можете использовать класс KeyConverter для преобразования System.Windows.Input.Key в строку

var strKey = new KeyConverter().ConvertToString(e.Key);

Вам все равно нужно проверить, удерживаются ли какие-либо ключи-модификаторы (Shift, Ctrl и Alt), и также следует отметить, что это работает только для букв и цифр. Специальные символы (такие как запятые, кавычки и т.д.) Будут отображаться так же, как e.Key.ToString()

Ответ 4

попробуйте это, он работает.

    private void txbNumber_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key >= Key.D0 && e.Key <= Key.D9) ; // it`s number
        else if (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) ; // it`s number
        else if (e.Key == Key.Escape || e.Key == Key.Tab || e.Key == Key.CapsLock || e.Key == Key.LeftShift || e.Key == Key.LeftCtrl ||
            e.Key == Key.LWin || e.Key == Key.LeftAlt || e.Key == Key.RightAlt || e.Key == Key.RightCtrl || e.Key == Key.RightShift ||
            e.Key == Key.Left || e.Key == Key.Up || e.Key == Key.Down || e.Key == Key.Right || e.Key == Key.Return || e.Key == Key.Delete ||
            e.Key == Key.System) ; // it`s a system key (add other key here if you want to allow)
        else
            e.Handled = true; // the key will sappressed
    }

Ответ 5

Можете ли вы поместить некоторый код, чтобы показать, что вы намерены? Это не должно работать для вас.

      if(e.key.ToString().Length==1)

    `Char.IsLetter(e.key.ToString()[0])`
    else

//

Ответ 6

Добавьте ссылку на Microsoft.VisualBasic и используйте функцию VB IsNumeric в сочетании с char.IsLetter().