您的位置:首页 > 其它

#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 属性来判断按键状态是打开或者关闭。

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
Trace.WriteLine(string.Format("----- PreviewKeyDown for key {0}, toggled = {1}", e.Key, e.IsToggled));
}

上面的代码给一个TextBox注册一个PreviewKeyDown事件,并打印按键开关状态,加入我们连续按下大小写开关键,输出结果如下:





按键的状态会来回切换。

其实,并不是只有上面提到的几个按键是开关键,你可以将任何键都视为开关键,连续按下任何键KeyEventArgs.IsToggled 属性都会来回切换。例如我们连续按下“a”键,上面的代码输出的结果如下图:





除了使用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://wpf.2000things.com/2012/09/13/646-detecting-a-keys-toggle-state-in-a-keypress-handler/


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  按键开关状态