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_Clicknullを渡すことでメソッドを起動できますが、IMOはそのようなイベントを起動するのはエレガントではありません。

于 2013-05-23T08:53:38.437 に答える
0

button4 click送信者として自分自身を渡しSystem EventArgs、2 番目のパラメーターとしてnew を渡す呼び出し:

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