C#KeyEventArgs有错误的KeyCode和KeyData值

时间:2014-08-20 18:31:47

标签: c# keyboard keycode keyeventargs

我为Windows窗体表单的KeyDown事件注册了一个处理程序。我想对按Ctrl和+做出反应。这里我的意思是+键不在键盘的计算器部分。调试时我看到如果只按下这个键,KeyEventArgs对象的KeyCode就是LButton | RButton |返回| ShiftKey |空间| F17。然后我测试了一些其他键。另外对于一些简单的数字和字母键,我得到了这段代码。谁能告诉我为什么会这样呢? 此外,我无法理解为什么单击鼠标按钮作为键值。如果我只按了一些键,为什么它们在KeyCode中呢? 但F17的关键还是比较陌生。据我所知,键盘只有F1到F12的功能键。这个F17键是什么?

处理程序是以下方法:

private void MainForm_KeyDown(object sender, KeyEventArgs e)
{
    if(e.KeyCode == Keys.Escape)
    {
        Close();
        e.Handled = true;
    }
    else if((e.Modifiers==Keys.Control)&&(e.KeyCode==Keys.Add))
    {
        /* omitted */
        e.Handled = true;
    }
    else if((e.Modifiers==Keys.Control)&&(e.KeyCode == Keys.Subtract)&&(lbFiles.SelectedItems.Count>0))
    {
        /* omitted */
        e.Handled = true;
    }
}

此处理程序由表单设计者注册。

1 个答案:

答案 0 :(得分:0)

您的答案在Keys枚举的文档中......

http://msdn.microsoft.com/en-us/library/system.windows.forms.keys%28v=vs.110%29.aspx

  

不要将此枚举中的值用于按位组合   操作。枚举中的值不是互斥的。

KeyCode是单个值,比较应该只是相等。