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