从函数中调用按钮事件

本文关键字:按钮 事件 调用 函数 | 更新日期: 2023-09-27 18:14:53

我想在函数中调用一个按钮事件,如下所示,这可能不是正确的方式。如果你有想法如何绕过这个,请分享一些关于如何实现它的样本。由于

 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);
    }

从函数中调用按钮事件

试试这个:

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);
}

为什么不将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);
}

你可以通过传递null来触发button4_Click方法,但在我看来,像这样触发事件并不优雅。

调用button4 click,将自己作为发送方,并将新的System EventArgs作为第二个参数:

button4_Click(button4, new System.EventArgs());