我一直在寻找 < 和 > under 的值System.Windows.Forms.Keys
,但我只能找到OemOpenBrackets
and OemCloseBrackets
。有人可以帮我吗?
问问题
2473 次
3 回答
3
你做错了,使用 KeyPress 事件而不是 KeyDown/Up。
并非世界上的每个键盘布局都与您的相同。例如,在德语或法语键盘上,< 由左侧 Shift 键旁边的一个额外键生成,> 通过按住 Shift 并按下该键来生成。只有 KeyPress 事件才能可靠地正确检测击键。
于 2013-10-12T06:03:17.977 回答
2
Keys枚举定义了虚拟键码,尖括号没有。对于不同的键盘布局,尖括号可以出现在不同的键上,因此没有简单可靠的方法将虚拟键码转换为字符。
更好的选择是使用KeyPress事件(如Hans建议的那样),并将KeyPressEventArgs.KeyChar
属性直接与'<'
or'>'
字符进行比较。
private void MyKeyPressHandler(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == '<')
{
MessageBox.Show("Yippee");
}
}
如果由于某种原因您被迫使用 KeyDown 事件中的键代码,那么您的代码将不适用于不同的键盘布局。
例如,在我的键盘上,< 和 > 位于逗号和句点键上,我可以将Oemcomma
and 与OemPeriod
结合使用Shift
:
if (e.KeyCode == Keys.Oemcomma && e.Shift)
{
MessageBox.Show("Works for certain keyboards.");
}
于 2013-10-12T05:09:02.563 回答
0
If you are doing this with a WPF control, you'll need to use the PreviewTextInput event. I discovered this trying to get a '[' on a French keyboard.
private void OnRichTextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
Debug.WriteLine("text = " + e.Text);
Debug.WriteLine("sys txt = " + e.SystemText);
if (e.Text == "<") { /* do something */ }
}
Sean
于 2014-02-19T10:28:22.813 回答