如何在Winform上读取键盘输入?

时间:2011-09-23 09:38:15

标签: c# winforms keyboard

我尝试使用KeyUp和KeyDown事件来读取键盘输入,但是只要我在Winform上放置其他控件,就不会读取键。如何确保读取密钥?

4 个答案:

答案 0 :(得分:4)

您可以在表单上设置KeyPreview = true以捕获键盘事件。

已编辑,让您了解:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.A) 
        e.SuppressKeyPress = true;
}

接收键盘事件的愚蠢样本,如果按下A则丢弃 如果焦点位于文本框中,您将看到文本被写入,但不是A !!

再次编辑:我从VB.NET示例中获取此代码 在您的usercontrol中,使用文本框的“Keypress”事件来引发“usercontrol事件” 此代码将位于您的自定义用户控件中:

'Declare the event
Event KeyPress(KeyAscii As Integer) 

Private Sub Text1_KeyPress(KeyAscii As Integer)
    RaiseEvent KeyPress(KeyAscii)
End Sub

答案 1 :(得分:2)

请参阅:http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx

设置KeyPreview = true,您的KeyUpKeyDown将识别所有键盘输入。

答案 2 :(得分:2)

正如marco所说,在表单上将KeyPreview设置为true以捕获整个表单中的关键事件而不仅仅是控件。

使用KeyPress事件... KeyUp / Down比框架更适用于框架。 KeyDown很好,如果你想要禁用一个键...仅数字字段等。一般来说,KeyPress是你所追求的。

如果你想阻止键击传播到其他控件设置KeyPressEventArgs.Handled = true。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress(v=VS.90).aspx

您是否已连接事件处理程序?

MyForm.KeyDown += MyHandler;

您也可以在属性窗格中执行此操作...单击事件图标...

答案 3 :(得分:0)

如果您正在寻找您的表格本身来阅读键盘输入,您已经得到了其他记者的答案。我正在添加此贡献,因为您可能希望将键处理添加到表单上的其他控件或用户控件。我在DevX.com上发表的文章Exploring Secrets of .NET Keystroke Handling(唉,它确实需要注册但它是免费的)让您全面讨论各种关键处理钩子和事件的发生方式和原因。此外,该文章还包括一个免费下载的“击键沙盒”实用程序,它实际上可以让您查看哪些控件正在接收哪些键处理事件。

以下是文章中的一个例子,以激起你的胃口:

enter image description here