WPF Key - это цифра или номер
У меня есть метод previewKeyDown
в моем окне, и я хотел бы знать, что нажатая клавиша - это только A-Z
letter или 1-0
number (без anyF1..12, enter, ctrl, alt и т.д. - буква или номер).
Я пробовал Char.IsLetter
, но мне нужно дать char, поэтому e.key.ToString()[0]
не работает, потому что это почти каждый раз письмо.
Ответы
Ответ 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().