问题的根源在于Winforms根本不支持这个简单的请求。
听起来怪怪的?这是。Winforms 通常非常接近硬件层,虽然有时这可能很有趣,但它也可能只是一个皮塔饼。
((应该注意汉斯的一个隐藏提示:在 中,KeyUp您会被告知哪个键被释放,这样您就可以跟踪任意数量的键..))
但现在有一个直接的解决方案,不需要您保留一堆bools并在KeyDown 和 KeyUp事件中管理它们......:输入Keyboard.IsKeyDown。
有了它,这样的代码就可以工作:
使用
Keyboard.IsKeyDown来确定某个键是否按下。e是 的一个实例KeyEventArgs。Run Code Online (Sandbox Code Playgroud)if (Keyboard.IsKeyDown(Key.Return)) { btnIsDown.Background = Brushes.Red; } ...
当然,您也可以检查多个密钥:
if (Keyboard.IsKeyDown(Key.A) && Keyboard.IsKeyDown(Key.W)) ...
Run Code Online (Sandbox Code Playgroud)
唯一的要求是您从以下地方借用WPF:
首先:添加命名空间:
using System.Windows.Input;
Run Code Online (Sandbox Code Playgroud)
然后:添加两个对项目的引用:
PresentationCore
WindowsBase
Run Code Online (Sandbox Code Playgroud)
现在您可以随时测试键盘,包括KeyPress事件..