3

大多数使用热键的程序都允许用户查看实际按下了哪些键,但我不确定它是如何完成的。作为参考,请参阅以下随机程序的屏幕截图,该程序捕获了按钮组合是什么:

在此处输入图像描述

我怎样才能实现这样的事情?我正在阅读的事件是 Type System.Windows.Forms.KeyEventArgs。有许多键没有描述其实际值,还有一些键的值不准确。除了找出每个键的代码并手动显示它们之外,没有其他解决方案吗?

编辑:为澄清起见,我想获得一个用户友好的字符串表示,如上面的屏幕截图所示。

4

4 回答 4

1

该事件具有和Alt的布尔属性。ControlShift

KeyCode的类型是System.Windows.Forms.Keys。它有一个[Flags]属性,但仅适用于Alt,ControlShift。所有其他键都有一个常规值。

private void showKeys(object sender, KeyEventArgs e)
{
    List<string> keys = new List<string>();

    if (e.Control == true)
    {
        keys.Add("CTRL");
    }

    if (e.Alt == true)
    {
        keys.Add("ALT");
    }

    if (e.Shift == true)
    {
        keys.Add("SHIFT");
    }

    switch (e.KeyCode)
    {
        case Keys.ControlKey:
        case Keys.Alt:
        case Keys.ShiftKey:
        case Keys.Menu:
            break;
        default:
            keys.Add(e.KeyCode.ToString()
                .Replace("Oem", string.Empty)
                );
            break;
    }

    e.Handled = true;

    textBox1.Text = string.Join(" + ", keys);
}
于 2013-02-13T07:24:01.593 回答
0

KeyEventArgs.KeyCode 属性....

如果您可以使用 javascript,您将拥有每个键的代码

javascript中的键码

我发现这很有趣 Keyeventargs.Keycode http://www.asquare.net/javascript/tests/KeyCode.html

于 2013-02-13T07:13:58.807 回答
0

您可以通过此代码按下女巫键(对于按下单个键或多个键,将表单 KeyPreview 设置为 true )

    private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        label1.Text = null;
        label1.Text=e.Modifiers.ToString();
    }
于 2013-02-13T07:19:43.107 回答
0

对于 win-form,您首先需要将属性KeyPreview设置为true。这样,即使表单的其中一个孩子拥有焦点而表单本身没有焦点,也应该检测到按下的键。

然后,覆盖以下方法之一:OnKeyUpOnKeyDownOnKeyPress

protected override void OnKeyUp(KeyEventArgs e)
{
  switch (e.KeyCode)
  {
      case Keys.F1:
         showHelpTopics();
         break;
  }
}

如果您没有对某些键的描述,只需执行 msdn 搜索,您就会找到它的详细信息。

于 2013-02-13T07:27:35.910 回答