我正在我的PreviewKeyDown事件中尝试此代码来检测是否按下了散列键(#),但它仍然在我的TextBox和MessageBox中显示数字(3): -
private void text_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.D3 && Keyboard.Modifiers == ModifierKeys.Shift)
MessageBox.Show(e.Key.ToString());
}
如何修改或更改此代码以执行我需要的操作?
感谢。
答案 0 :(得分:0)
As an Administrator
会捕获最后一个按下的键KeyDown
,因此您会在输出中看到Key.D3
。这是预期的行为。
为什么要使用3
?如果您想要查看正在按下哪个键,这是有意义的,但您事先明确检查 SHIFT + 3 组合,所以您已经知道你是什么后。
e.Key.ToString()
此外,作为评论中的@keyboardP noted,键盘上// slightly modified your check
if (e.Key == Key.D3 && (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift)
{
MessageBox.Show("SHIFT+3 combo pressed");
}
符号的位置取决于键盘本身的布局(美国/英国等),或者您配置的位置你的操作系统。也许您可以将键盘布局的检查添加到混合中(可能值得查看#
命名空间中的InputLanguageManager
类。
编辑:作为替代方案,为什么不跟踪文本框中是否输入了System.Windows.Input
字符,而不是检查键盘组合?对我来说似乎更直接,但这取决于你的要求。