我一直在寻找<的值。和>在System.Windows.Forms.Keys
下,但我只能找到OemOpenBrackets
和OemCloseBrackets
。有人可以帮助我吗?
答案 0 :(得分:3)
你做错了,使用KeyPress事件代替KeyDown / Up。
并非世界上的每个键盘布局都与您的相同。例如,在德语或French keyboard上,<由左Shift键旁边的额外键产生,>按住Shift并按下该键。只有KeyPress事件才能正确检测击键。
答案 1 :(得分:2)
Keys枚举定义了虚拟键码,而尖括号则没有。对于不同的键盘布局,尖括号可以出现在不同的键上,因此没有 easy 可靠的方法将虚拟键码转换为字符。
更好的选择是使用KeyPress事件(由Hans建议),并将KeyPressEventArgs.KeyChar
属性直接与'<'
或'>'
进行比较字符。
private void MyKeyPressHandler(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '<')
{
MessageBox.Show("Yippee");
}
}
如果由于某种原因您被迫使用KeyDown事件中的密钥代码,那么您的代码将无法用于不同的键盘布局。
例如,在我的键盘上&lt;和&gt;在逗号和句点键上,我可以将Oemcomma
和OemPeriod
与Shift
结合使用:
if (e.KeyCode == Keys.Oemcomma && e.Shift)
{
MessageBox.Show("Works for certain keyboards.");
}
答案 2 :(得分:0)
如果您使用WPF控件执行此操作,则需要使用PreviewTextInput事件。我发现这个试图在法语键盘上找到一个'['。
private void OnRichTextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
Debug.WriteLine("text = " + e.Text);
Debug.WriteLine("sys txt = " + e.SystemText);
if (e.Text == "<") { /* do something */ }
}
肖恩