2016-08-20 65 views
0

我在我PreviewKeyDown事件试图验证码,如果哈希(#)键被按下或不检测,但它仍然显示数(3)在我的文本框和消息框: -如何检测在WPF中是否按下散列键(#)?

private void text_PreviewKeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.D3 && Keyboard.Modifiers == ModifierKeys.Shift) 
      MessageBox.Show(e.Key.ToString()); 
    } 

我怎样才能修改或更改此代码以执行我所需的操作?!
谢谢。

回答

0

KeyDown捕获按下的最后一个键,即Key.D3,因此为什么您在输出中看到3。这是预期的行为。 你为什么想要使用e.Key.ToString()?如果您想查看哪个按键被按下,这是有意义的,但是您事先明确地检查了组合键,因此您已经知道您正在处理的是什么。

// slightly modified your check 
if (e.Key == Key.D3 && (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift) 
{ 
    MessageBox.Show("SHIFT+3 combo pressed"); 
} 

此外,如在评论@keyboardP noted,键盘上的#标志的位置取决于键盘本身(美国/英国等)的布局,或因为你拥有它您的操作系统配置。也许你可以将键盘布局的检查添加到组合中(可能值得看一下System.Windows.Input命名空间中的InputLanguageManager类)。

编辑:作为替代方案,为什么不跟踪#字符是否在文本框中输入,而不是检查键盘组合?这对我来说似乎更直截了当,尽管这取决于你的要求。

+0

这只适用于散列码在数字“3”上的键盘。我的英国键盘在输入按钮旁边有哈希键,并与'tilde'键共享。 – keyboardP

+0

与我的一样,但我在Windows中配置了美国布局。我同意你的评论并更新了我的答案。 – trashr0x

相关问题