小于C#中的密钥枚举

时间:2013-10-12 05:00:09

标签: .net winforms

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

3 个答案:

答案 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;在逗号和句点键上,我可以将OemcommaOemPeriodShift结合使用:

        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 */ }
}

肖恩