C# 检测单个窗体上的键盘输入和鼠标活动

C# 检测单个窗体上的键盘输入和鼠标活动,c#,winforms,C#,Winforms,我有下面的表格,我想检测一下按键和鼠标在按钮上的点击 例如,如果我在键盘上按S,消息将显示开始,按键将显示键盘按键。当鼠标单击开始按钮时也会发生同样的情况,除了按键将显示开始BTN 这是我的按钮代码。如果我只为按钮或只为IsKeyDown执行操作,它工作得很好,但当我将两者组合在一种形式中时,它们就会失控 private void btnStart_Click(object sender, EventArgs e) { lblKeypress.Text = "START BTN";

我有下面的表格,我想检测一下按键和鼠标在按钮上的点击

例如,如果我在键盘上按S,消息将显示开始按键将显示键盘按键。当鼠标单击开始按钮时也会发生同样的情况,除了按键将显示开始BTN

这是我的按钮代码。如果我只为按钮或只为IsKeyDown执行操作,它工作得很好,但当我将两者组合在一种形式中时,它们就会失控

private void btnStart_Click(object sender, EventArgs e)
{
    lblKeypress.Text = "START BTN";
    lblmessage.Text = "START";
}
这是我的
键盘。IsKeyDown
代码:

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (Keyboard.IsKeyDown(Key.S))
    {
        lblKeypress.Text = "Keyboard Press";
        lblmessage.Text = "START";
    }
}
请帮助,谢谢。

请确保在表单中将
KeyPreviewProperty
设置为TRUE

在Form1.Designer.cs中

this.KeyDown+=new System.Windows.Forms.KeyEventHandler(this.form\u KeyDown)

注:

  • 确保没有任何无关的WPF命名空间`
  • (Keyboard.IsKeyDown(Key.S))
    是一种
    WPF
    方法,在WinForms中,最好使用
    e.KeyValue和键的组合
试试这个代码

 private void Form1_KeyDown(object sender, 
 EventArgs e){
   if (e.KeyData == Keys.S){
      lblKeypress.Text = "Keyboard Press";
      lblmessage.Text = "START";
    }
}

错误是什么?你是什么意思“当我在一个窗体中同时使用这两种代码时,它们会失控”没有显示错误,但当两种代码应用于同一个windows窗体时,只能单击按钮,而当我在键盘上按s时,什么也不会发生。好像只有一个是启用的。会是那样吗?我不能同时使用这两个?我想不应该是这样的,对吗?@s.young,我已经更新了下面的答案,让我知道这是否有效请记住一个常见的错误是用户在复制代码时忘记添加事件处理程序。要使此方法有效,只需在表单的构造函数中添加以下内容
this.KeyDown+=newkeyeventHandler(form_KeyDown)或通过IDE的表单编辑器添加它。虽然这没有错,但需要注意的是,除非您真正知道自己在做什么,否则不应该在form.Designer.cs中胡闹,这就是为什么我提到将前面提到的代码行放在form.cs中的forms构造函数方法中,因为这样做不会打乱Designer.cs中的任何其他代码。
 private void Form1_KeyDown(object sender, 
 EventArgs e){
   if (e.KeyData == Keys.S){
      lblKeypress.Text = "Keyboard Press";
      lblmessage.Text = "START";
    }
}