【发布时间】:2023-03-12 12:10:01
【问题描述】:
我必须捕捉用户的输入才能将快捷方式发送到我的 WPF 应用程序。
我在互联网上发现我必须这样做:
按下键时捕捉:
void keyDown(object sender, KeyEventArgs e) {
if ((Keyboard.Modifiers & Modifiers.Shift) == Modifiers.Shift)
{
KeyPressed.SetShift(true);
}
if ( Key.Shift != e.Key && Key.LeftAlt != e.Key && ....)
{
KeyPressed.SetKey(e.Key);
}
其中 KeyPressed 是一个带有静态布尔变量的类,如果 ⇧Shift、Alt 或 Ctrl 以及另一个键被按下(带有 Alt 和 Ctrl 而不是 if 子句中的 ⇧Shift)。第二个if 是捕捉一个不同于Alt、⇧Shift、Control 的快捷键作为快捷键。例如,对于快捷键 Alt+C 我们有:
- KeyPressed.Shift = false;
- KeyPressed.Alt = true;
- KeyPressed.Ctrl = false;
- KeyPressed.key = 键;
最后一个元素的类型为System.Window.Input.Key。
释放键时捕获:
void keyUp(object sender, KeyEventArgs e) {
if(KeyPressed.getShift())
this.textField.Text += "+Shift";
if(KeyPressed.getKeyCode())
this.textField.Text += "+" + KeyPressed.k.toString();
KeyPressed.SetShift(false);
}
在这里,我只是将接收到的输入附加到文本字段,然后将所有键设置为 false 以正确捕获下一个快捷方式。
此代码适用于所有快捷键,例如 Ctrl+A、Ctrl+Alt+ C, ⇧Shift+L, Alt, 但是当我按下快捷键就像 Alt+V,它只捕捉 Alt,而不捕捉另一个键。
我该如何管理?
有什么方法可以更好地处理快捷方式?谢谢。
【问题讨论】:
-
更好的方法:InputBindings,详情见this article。