#646 – 在按键按下事件处理程序中判断按键开关状态(Detecting a Key’s Toggle State in a Keypress Handler)
2017-02-06 16:06
886 查看
在键盘上,有些键是可以切换状态的开关键,一些常用的开关键为:Caps Lock(大小写开关键), Scroll Lock(滚动锁定键) 和Num Lock(数字键盘开关键)。注意,通常情况下Shift键不被认为是开关键。
当按键被按下,我们可以通过按键按下事件处理函数的参数中的KeyEventArgs.IsToggled 属性来判断按键状态是打开或者关闭。
上面的代码给一个TextBox注册一个PreviewKeyDown事件,并打印按键开关状态,加入我们连续按下大小写开关键,输出结果如下:
![](https://2000thingswpf.files.wordpress.com/2012/09/646-001.png?w=630)
按键的状态会来回切换。
其实,并不是只有上面提到的几个按键是开关键,你可以将任何键都视为开关键,连续按下任何键KeyEventArgs.IsToggled 属性都会来回切换。例如我们连续按下“a”键,上面的代码输出的结果如下图:
![](https://2000thingswpf.files.wordpress.com/2012/09/647-001.png?w=630)
除了使用KeyEventArgs.IsToggled 属性,你还可以使用KeyboardDevice.IsKeyToggled 方法来判断按键的开关状态。我们将上面的代码修改一下:
按下一些按键后,输入如下:
![](https://2000thingswpf.files.wordpress.com/2012/09/648-001.png?w=630&h=453)
原文地址:https://wpf.2000things.com/2012/09/13/646-detecting-a-keys-toggle-state-in-a-keypress-handler/
当按键被按下,我们可以通过按键按下事件处理函数的参数中的KeyEventArgs.IsToggled 属性来判断按键状态是打开或者关闭。
private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e) { Trace.WriteLine(string.Format("----- PreviewKeyDown for key {0}, toggled = {1}", e.Key, e.IsToggled)); }
上面的代码给一个TextBox注册一个PreviewKeyDown事件,并打印按键开关状态,加入我们连续按下大小写开关键,输出结果如下:
![](https://2000thingswpf.files.wordpress.com/2012/09/646-001.png?w=630)
按键的状态会来回切换。
其实,并不是只有上面提到的几个按键是开关键,你可以将任何键都视为开关键,连续按下任何键KeyEventArgs.IsToggled 属性都会来回切换。例如我们连续按下“a”键,上面的代码输出的结果如下图:
![](https://2000thingswpf.files.wordpress.com/2012/09/647-001.png?w=630)
除了使用KeyEventArgs.IsToggled 属性,你还可以使用KeyboardDevice.IsKeyToggled 方法来判断按键的开关状态。我们将上面的代码修改一下:
private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e) { Console.WriteLine(string.Format("Toggle info: Caps Lock:{0}, Scroll Lock: {1}, Num Lock: {2}", e.KeyboardDevice.IsKeyToggled(Key.CapsLock), e.KeyboardDevice.IsKeyToggled(Key.Scroll), e.KeyboardDevice.IsKeyToggled(Key.NumLock))); }
按下一些按键后,输入如下:
![](https://2000thingswpf.files.wordpress.com/2012/09/648-001.png?w=630&h=453)
原文地址:https://wpf.2000things.com/2012/09/13/646-detecting-a-keys-toggle-state-in-a-keypress-handler/
相关文章推荐
- 从keyPressEvent按键事件中获取QKeySequence
- js判断checkbox状态,处理表单提交事件
- 如何判断某个事件已经绑定了某个事件处理程序?
- Android开发--事件的处理/按键按下,弹起,触摸事件等
- 现代事件处理程序和Event对象对浏览器兼容性的判断和解决
- Android开发--事件的处理/按键按下,弹起,触摸事件等
- react初探(一)之JSX、状态(state)管理、条件渲染、事件处理
- 为自定义 HTTP 处理程序(HttpHandler)开启会话状态(Session)
- 处理文本框的鼠标事件,判断鼠标的状态
- 【Android TV】按键事件KeyEvent的分发处理流程解析
- Windows运行程序错误问题事件名称: InPageError 错误状态码: c000009c解决办法
- 如何判断某个事件已经绑定了某个事件处理程序?
- 如何判断某个事件已经绑定了某个事件处理程序?
- Activity 状态事件处理程序
- 提升MOSS Event Handler事件处理程序运行级别的方法
- C#注册控件处理程序(SetConsoleCtrlHandler)函数示例 控制台关闭事件改写
- DOM事件详解及调用(跨浏览器事件处理程序,判断语句)
- #501 – 在对个控件中共享事件处理程序(Sharing an Event Handler Across Multiple Controls)
- JS事件--事件处理程序之DOM2事件处理程序
- Java Swing事件处理——键盘事件及监听处理 KeyListener 按键测试