0

我想在如下所示的函数中调用按钮事件,这可能不是正确的方法。如果您知道如何解决这个问题,请分享一些关于如何实现它的示例。谢谢

 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    {
        const int WM_KEYDOWN = 0x100;
        const int WM_SYSKEYDOWN = 0x104;

        if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
        {
            switch (keyData)
            {
              case Keys.Down:
              button4_Click(sender, e); //error: sender and e does not exist in the current context
              break;
            }
        }

        return base.ProcessCmdKey(ref msg, keyData);
    }
4

3 回答 3

2

试试这个:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{
    const int WM_KEYDOWN = 0x100;
    const int WM_SYSKEYDOWN = 0x104;

    if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
    {
        switch (keyData)
        {
          case Keys.Down:
          button4_Click(null, null);
          break;
        }
    }

    return base.ProcessCmdKey(ref msg, keyData);
}
于 2013-05-23T08:53:31.143 回答
1

为什么不将button4_Click代码移动到其他方法,比如ProcessSomething()在那里进行处理。然后只需改变

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{
    const int WM_KEYDOWN = 0x100;
    const int WM_SYSKEYDOWN = 0x104;

    if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
    {
        switch (keyData)
        {
          case Keys.Down:
          ProcessSomething();
          break;
        }
    }

    return base.ProcessCmdKey(ref msg, keyData);
}

您可以button4_Click通过将空值传递给它来触发方法,但 IMO 触发这样的事件并不优雅。

于 2013-05-23T08:53:38.437 回答
0

调用button4 click将自身作为发件人,将新System EventArgs的作为第二个参数:

button4_Click(button4, new System.EventArgs());
于 2013-05-23T08:53:26.780 回答