大多数使用热键的程序都允许用户查看实际按下了哪些键,但我不确定它是如何完成的。作为参考,请参阅以下随机程序的屏幕截图,该程序捕获了按钮组合是什么:
我怎样才能实现这样的事情?我正在阅读的事件是 Type System.Windows.Forms.KeyEventArgs
。有许多键没有描述其实际值,还有一些键的值不准确。除了找出每个键的代码并手动显示它们之外,没有其他解决方案吗?
编辑:为澄清起见,我想获得一个用户友好的字符串表示,如上面的屏幕截图所示。
该事件具有和Alt
的布尔属性。Control
Shift
KeyCode
的类型是System.Windows.Forms.Keys。它有一个[Flags]
属性,但仅适用于Alt
,Control
和Shift
。所有其他键都有一个常规值。
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);
}
如果您可以使用 javascript,您将拥有每个键的代码
我发现这很有趣 Keyeventargs.Keycode http://www.asquare.net/javascript/tests/KeyCode.html
您可以通过此代码按下女巫键(对于按下单个键或多个键,将表单 KeyPreview 设置为 true )
private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
label1.Text = null;
label1.Text=e.Modifiers.ToString();
}
对于 win-form,您首先需要将属性KeyPreview设置为true
。这样,即使表单的其中一个孩子拥有焦点而表单本身没有焦点,也应该检测到按下的键。
然后,覆盖以下方法之一:OnKeyUp
、OnKeyDown
和OnKeyPress
。
protected override void OnKeyUp(KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.F1:
showHelpTopics();
break;
}
}
如果您没有对某些键的描述,只需执行 msdn 搜索,您就会找到它的详细信息。