2016-10-25 37 views
0

我是一位全新的程序员,他的第一个应用程序也被称为webbrowser。我试图设置键盘快捷键来完成不同的功能,但是我正在紧张地挣扎着。ConsoleKey.F6使快捷键U?

我很不确定自己做错了什么,但使用下面的代码它会使键盘快捷键U?

我不知道问题可能是什么或如何解决它。我环顾四周,并没有看到有类似问题的人。 这种情况发生在我尝试打开的任何项目上。如果我有一个完全空白的Windows窗体应用程序并使用下面的代码设置Form1 Keypress,那么密钥U将打开mbox。 F6什么都不做。

其他键盘快捷键不起作用。

我试过了ConsoleKey.F6和Keys.F6。

private void Form1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == (char)Keys.F6) 
    { 
     MessageBox.Show("Test"); 
    } 
} 

任何人有什么想法?

+1

你刚开始学习编程,你的第一个项目是一个Web浏览器?看起来像一个非常陡峭的学习曲线...... –

+1

为什么使用'e.KeyChar'? F6键没有字符,所以正确的方法是'e.Key == Keys.F6'。 –

+0

@IanH。这应该是一个答案,而不是一个评论。 – CSharpie

回答

1
  • 首先确保的KeyPreview财产的主要形式设置为true

enter image description here

  • 然后在创建事件Form1_KeyDown主要形式

enter image description here

使用e.KeyCode比较按下的键:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.U) 
    { 
     MessageBox.Show("You pressed the U key"); 
    } 
} 
+0

谢谢你。适用于KeyDown。非常感谢。 –

+0

唯一的问题是现在我有另一个问题哈哈。键盘快捷键在表单中的任何位置都不起作用。但是我会提出一个新的问题,因为这是一个完全不同的问题。谢谢!!! –

+0

应该在'Form1'的任何地方工作 – Jim

1

这里的问题是e.KeyChar。 F6键没有字符,所以这样做是正确的做法...

if (e.Key == Keys.F6) 
// ... 

编辑:
好吧,我得到了这个问题。表格KeyPress函数获取一些不包含Key属性的KeyPressEventArgs
要解决此问题,请丢弃KeyPress函数并使用PreviewKeyDown来代替。这需要KeyEventArgs其中包含Key属性。

来源:
KeyPressEventArgs
KeyEventArgs

+0

[链接](http://puu.sh/rVaZa/5415b8fb49.png) –

+0

全新的Windows Forms应用程序。 –

+0

如果我使用KeyDown而不是KeyPress,那么我必须使用e.KeyCode,仍然没有E.Key函数。不确定。 –

0

我建议绕了略有不同。下面的代码应该没有问题。

protected override bool ProcessCmdKey (ref Message msg, Keys keyData) { 
    if (keyData == (Keys.F6)) { 
     MessageBox.Show("This will now display!"); 
     return true; 
    } 
return false 
}