【发布时间】:2017-05-25 15:41:26
【问题描述】:
我已经搜索了如何在 c# 中检测键盘组合。
到目前为止,我将表单的KeyDown 事件与KeyPreview = true 一起使用。
我需要检查e.Modifiers 是否是任何修饰符,而e.KeyCode 是否不是修饰符。
最好是一个真正开放的声明,例如:
if(Keys.Modifiers.Contains(e.Modifiers) && !Keys.Modifiers.Contains(e.KeyCode)){}
很遗憾,这不起作用。
这也不起作用,它适用于所有修饰键。
if ((e.Modifiers == Keys.Alt || e.Modifiers == Keys.Control || e.Modifiers == Keys.Shift)
&& (e.KeyCode != Keys.Alt && e.KeyCode != Keys.Control && e.KeyCode != Keys.Shift))
这几乎可以正常工作,但由于没有 Keys.AltKey,所以当点击 ALT 时它会变为 true。
if ((e.Modifiers == Keys.Alt || e.Modifiers == Keys.Control || e.Modifiers == Keys.Shift)
&& (e.KeyCode != Keys.Alt && e.KeyCode != Keys.ControlKey && e.KeyCode != Keys.ShiftKey))
我怎么能做到这一点?
e.KeyCode 应该有可能不是修饰符。
原因: 我需要让用户可以使用至少一个修饰符和至少一个其他键来按下任何组合键。
正确获取语句后,如何将组合保存在变量中并在再次输入时检查它的最佳方法是什么?我想过将每个输入的键(当一个是修饰符而另一个不是)保存在List<Keys> 中,并在输入组合的一个键不在列表中时通过foreach 其中return false; 进行检查。
一切都应该尽可能动态。
如何扩展它以检查任何组合?喜欢Ctrl + F + Shift + C 或Ctrl + F + H
谢谢!
迈克尔
【问题讨论】: