3

我一直在寻找 < 和 > under 的值System.Windows.Forms.Keys,但我只能找到OemOpenBracketsand OemCloseBrackets。有人可以帮我吗?

4

3 回答 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 事件中的键代码,那么您的代码将不适用于不同的键盘布局。

例如,在我的键盘上,< 和 > 位于逗号和句点键上,我可以将Oemcommaand 与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 回答