c# – 检查键是否是字母/数字/特殊符号

我重写ProcessCmdKey,当我得到Keys参数时,我想检查这些键是字母还是数字还是特殊符号.

我有这个片段

protected override bool ProcessCmdKey(ref Message msg,Keys keyData)
    {
            char key = (char)keyData;
            if(char.IsLetterOrDigit(key)
            {
                Console.WriteLine(key);
            }
            return base.ProcessCmdKey(ref msg,keyData);
    }

一切都适用于字母和数字.但是当我按下F1-F12时,它会将它们转换成字母.

也许有人知道更好的方法解决这个任务?

解决方法

改为覆盖表单的OnKeyPress方法. KeyPressEventArgs提供了一个 KeyChar属性,允许您在char上使用静态方法.

正如Cody Gray在评论中所提到的,这种方法只会触发具有角色信息的击键.其他击键如F1-F12应在OnKeyDown或OnKeyUp中处理,具体取决于您的情况.

MSDN开始:

Key events occur in the following
order:

  • 07002
  • 07003
  • 07004

The KeyPress event is not raised by
noncharacter keys
; however,the
noncharacter keys do raise the KeyDown
and KeyUp events.

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
  }
}

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...