我试图测试是否按下了Alt键。
我的检查类似于:
private void ProcessCmdKey(Keys keyData)
{
if (keyData == Keys.Alt)
{
System.Console.WriteLine ("Alt Key Pressed");
}
}
无论如何,当我按下Alt键时,当我按下时,调试器告诉我按下的键实际上是Keys.RButton。 Keys.ShiftKey | Keys.Alt
任何人都可以了解正在发生的事情,或者可能会指出一篇可以解释的文章吗?
由于 FZ
编辑: 我仍然有点迷失为什么ENUM会设置其他位值而不仅仅是Alt键?我知道enum可以包含多个带有标记attrivbute的状态,但是如果我按下的所有内容都是Alt,我不知道为什么会这样做?
答案 0 :(得分:6)
如果要测试按下的键是否Alt
是 part ,可以执行按位测试;
if((keyData & Keys.Alt) == Keys.Alt) {...}
答案 1 :(得分:4)
密钥是Flags Enumeration。这意味着它在给定时间可以有多个值。您应该这样检查:
if ( (keyData & Keys.Alt) == Keys.Alt)
{
// Alt was pressed!
}
答案 2 :(得分:1)
带有FlagsAttribute的枚举是使用位实现的 请参阅此链接以获得良好的开端 - http://msdn.microsoft.com/en-us/library/cc138362.aspx
编辑:你在操作过程中用Shift键按下RIGHT(鼠标按钮),在调试时选择/突出显示某些内容吗?
答案 3 :(得分:1)
Mark的技术(the accepted answer)适用于修饰键,但令我惊讶的是,某些键(例如箭头)是位的组合,并且不起作用。例如,以下测试结果是正确的:
((Keys.Right & Keys.Left) == Keys.Left)
我在关于箭头键处理的相关StackOverflow帖子上有posted some useful little functions for key handling。