【问题标题】:C# creating a hotkey that triggers functionC#创建一个触发功能的热键
【发布时间】:2017-06-18 00:53:15
【问题描述】:

我目前正在处理一个项目,并想在我的窗口中添加一个KeyEventHandler,它会在按下一个键时触发一个功能。

然而,我的问题是,当我想添加这样的处理程序时

testObject.KeyDown += new KeyEventHandler(doSomethingOnKeyPress);

private void doSomethingOnKeyPress(object sender, KeyEventArgs e))
{
  if (e.Control && e.KeyCode == Keys.R)
  { 
   // do something
  }
}

我收到程序无法将Forms.KeyEventHandler 转换为Input.KeyEventHandler 的错误。

谁能指导我在这个问题上的正确方向?

【问题讨论】:

  • 你的testObject是什么类型的?显然,如果doSomethingOnKeyPress 匹配事件处理程序签名,则不需要使用构造函数+= new KeyEventHandler(doSomethingOnKeyPress)testObject.KeyDown += doSomethingOnKeyPress 会起作用。
  • 我使用的测试对象是一个文本框

标签: c# winforms visual-studio user-interface event-handling


【解决方案1】:

我认为你使用了错误的命名空间尝试更改

private void doSomethingOnKeyPress(object sender, KeyEventArgs e))

private void doSomethingOnKeyPress(object sender, Forms.KeyEventHandler e))

或者在使用部分整理好

【讨论】:

    【解决方案2】:

    更改命名空间应该可以,但我想应该反过来,即

    private void doSomethingOnKeyPress(object sender, System.Windows.Input.KeyEventArgs e)
    {
      if (e.Control && e.KeyCode == Keys.R)
      { 
       // do something
      }
    }
    

    【讨论】:

      【解决方案3】:

      您不小心混淆了 KeyPress 和 KeyDown 事件。

      KeyPress 和 KeyDown 是两个不同的事件,因此具有不同的事件处理程序!

      KeyDown 应该是: testObject.KeyDown += new KeyEventHandler(doSomethingOnKeyPress);

      【讨论】:

        【解决方案4】:
        private void myClass(){
        //doing something
        }
        private void button1_KeyDown(object sender, KeyEventArgs e)
        {
            if(e.KeyCode == Keys.W){
            myClass();
            }
        }*
        

        你可以使用“W”例如你可以做 D A 或任何你想要的

        编辑:忘记上面的答案,问题是“doSomethingOnKeyPress”是一个按键功能,但代码试图在 KeyDown 事件上实现它,如:“testObject.KeyDown +="

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-10-21
          • 2017-10-20
          • 2016-02-28
          • 1970-01-01
          • 2019-09-09
          • 2014-05-25
          • 2023-03-18
          • 1970-01-01
          相关资源
          最近更新 更多