【问题标题】:C#: Getting the correct keys pressed from KeyEventArgs' KeyDataC#:从 KeyEventArgs 的 KeyData 中获取正确的按键
【发布时间】:2009-05-14 21:08:47
【问题描述】:

我正在捕获KeyDown 事件,我需要能够检查当前按下的键是否为:Ctrl + Shift + M ?


我知道我需要使用来自KeyEventArgse.KeyDataKeys 枚举以及带有枚举标志和位的东西,但我不确定如何检查组合。

【问题讨论】:

  • 哇。你是怎么做到的?我的意思是键上的格式。
  • @cheeso,他在单词周围使用了 标签...例如Ctrl

标签: c# enums enum-flags keyeventargs


【解决方案1】:

您需要使用 KeyEventArgs 类的Modifiers 属性。

类似:

//asumming e is of type KeyEventArgs (such as it is 
// on a KeyDown event handler
// ..
bool ctrlShiftM; //will be true if the combination Ctrl + Shift + M is pressed, false otherwise

ctrlShiftM = ((e.KeyCode == Keys.M) &&               // test for M pressed
              ((e.Modifiers & Keys.Shift) != 0) &&   // test for Shift modifier
              ((e.Modifiers & Keys.Control) != 0));  // test for Ctrl modifier
if (ctrlShiftM == true)
{
    Console.WriteLine("[Ctrl] + [Shift] + M was pressed");
}

【讨论】:

  • 优秀。正是我想要的。感谢您的回答。
  • 很高兴我能帮上忙。我知道有一天我对这些东西感到沮丧.. ;)
  • 如何查看 F10+X ? bx = ((e.KeyCode == Keys.X) && ((e.Modifiers & Keys.F10) != 0)); 不起作用 :( 为什么?你能告诉我如何检查 F10+X 吗?
【解决方案2】:

我认为它最容易使用:

if(e.KeyData == (Keys.Control | Keys.G))

【讨论】:

  • 在某些情况下,这是识别输入键的最佳方式
【解决方案3】:

您可以使用类似于以下的技术进行检查:

if(Control.ModifierKeys == Keys.Control && Control.ModifierKeys == Keys.Shift)

这与正常的密钥检查相结合将为您提供您所寻求的答案。

【讨论】:

  • 那行不通。 ModifierKeys - 没有掩码 - 不可能同时等于两个不同的值:-)
  • 我知道这有点老了,但它不起作用,你必须先屏蔽它... if ((Control.ModifierKeys & Keys.Control) == Keys.Control && (Control.ModifierKeys & Keys.Shift) == Keys.Shift)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 2011-08-03
  • 2019-07-06
  • 1970-01-01
相关资源
最近更新 更多