【问题标题】:C# KeyEventArgs has wrong KeyCode and KeyData values [duplicate]C# KeyEventArgs 的 KeyCode 和 KeyData 值错误 [重复]
【发布时间】:2014-08-20 18:31:46
【问题描述】:

我为我的 Windows 窗体窗体的 KeyDown 事件注册了一个处理程序。我想对按下 Ctrl 和 + 做出反应。这里我的意思是+键,它不在键盘的计算器部分。在调试时我看到如果我只按下这个键,KeyEventArgs 对象的 KeyCode 是 LButton |右按钮 |返回 | Shift键 |空间 | 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;
    }
}

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

【问题讨论】:

  • 显示您已完成注册事件处理程序的代码还显示您的代码您正在检查 Key concat 表示您按下了哪些组合键
  • MSDN Key Enumerations 这将解释键盘以及每个键的作用 ||手段
  • 但是如果我只按添加键而不按其他键,也没有控制键,为什么我会得到控制键的值?
  • 看看这个帖子,在接受的答案KeyCodes 中有你需要的一切
  • 对不起,我不太明白你的意思。如果是 Preview 属性,则设置为 true。

标签: c# keyboard keycode keyeventargs


【解决方案1】:

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

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

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

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

【讨论】:

  • 好的。但如果我只按一个键,我会得到组合值。
  • 这是 [Flags] 属性意外放置在类型上的副作用,因此是注释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 2014-10-24
  • 2013-08-20
  • 1970-01-01
相关资源
最近更新 更多