Проверьте, являются ли клавиши буквой / цифрой / специальным символом
заменить ProcessCmdKey
и когда я получаю
6 ответов
переопределить форму метод. The KeyPressEventArgs
предоставляет KeyChar
свойство, которое позволяет использовать статические методы на char
.
как упоминалось Коди Грей в комментариях, этот метод срабатывает только на ключевых штрихах, которые имеют информацию о символах. Другие ключевые штрихи, такие как F1-F12, должны обрабатываться в OnKeyDown
или OnKeyUp
в зависимости от вашей ситуации.
С MSDN:
ключевые события происходят в следующем порядок:
на событие нажатия клавиши не вызывается нехарактерные ключи; однако нехарактерные ключи поднимают KeyDown и keyup.
пример
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress(e);
if (char.IsLetter(e.KeyChar))
{
// char is letter
}
else if (char.IsDigit(e.KeyChar))
{
// char is digit
}
else
{
// char is neither letter or digit.
// there are more methods you can use to determine the
// type of char, e.g. char.IsSymbol
}
}
попробовать
if( !(keyData >= Keys.F1 && keyData <= Keys.F12))
{
char key = (char)keyData;
if(char.IsLetterOrDigit(key))
{
Console.WriteLine(key);
return false;
}
}
return base.ProcessCmdKey(ref msg, keyData);
попробуйте использовать keyData.KeyCode
и, возможно, даже тестирование в пределах диапазона вместо использования Char.IsLetterOrDigit. например,
if (keyData.KeyCode >= Keys.D0 && keyData.KeyCode <= Keys.Z) {
...
}
вам нужно или гигантское заявление переключателя / случая или проверка для рядов. Возможно, Вам будет легче проверить ключи, которые вы хотите исключить, в зависимости от того, которых меньше. Посмотрите на это для всех возможных значений. http://msdn.microsoft.com/en-us/library/system.windows.forms.keys.aspx
if (keyData >= Keys.A && keyData <= Keys.Z)
// do something
или
switch(keyData) {
case Keys.Add:
case Keys.Multiply:
// etc.
// do something
break;
}
Я пробовал следующий код, но по какой-то причине char.Метод IsLetter () распознает следующие ключи как буквы???
Ф1, Ф8, Ф9, Ф11, Ф12, RightShift, LeftShift, RightAlt, RightCtrl, LeftCtrl, LeftWin, RightWin, Что NumLock.
этот метод, похоже, не является полным доказательством того, что он считает буквой.
if(char.IsLetter((char)e.Key) || char.IsDigit((char)e.Key))