36

WinFomsプロジェクトがあると仮定します。ボタンは1つだけです(例button1)。

ButtonClicked問題は、実際にクリックせずにコードを介してイベントをトリガーすることは可能ですか?

4

9 に答える 9

48

ボタン コントロールには、呼び出すことができる PerformClick() メソッドがあります。

button1.PerformClick();
于 2012-08-29T18:52:36.420 に答える
25

.NET フレームワークは、イベントごとに eventを発生させるXメソッドがあるパターンを使用します。このMSDN の記事を参照してください。宣言クラスの外部からイベントを発生させるには、クラスを派生させ、パブリック ラッパー メソッドを追加する必要があります。その場合、次のようになります。protected void OnX(EventArgs e) {}XButton

class MyButton : System.Windows.Forms.Button
{

    public void ProgrammaticClick(EventArgs e)
    {
        base.OnClick(e);
    }

}
于 2012-08-29T19:59:05.003 に答える
17

イベント ハンドラー関数を直接呼び出してnull、送信者とEventArgs.Empty引数を指定するだけです。

void ButtonClicked(object sender, EventArgs e)
{
    // do stuff
}

// Somewhere else in your code:
button1.Click += new EventHandler(ButtonClicked);

// call the event handler directly:
ButtonClicked(button1, EventArgs.Empty);

または、ロジックをButtonClickedイベントから独自の関数に移動し、イベント ハンドラーと他のコードで新しい関数を呼び出します。

void StuffThatHappensOnButtonClick()
{
    // do stuff
}

void ButtonClicked(object sender, EventArgs e)
{
    StuffThatHappensOnButtonClick();
}

// Somewhere else in your code:
button1.Click += new EventHandler(ButtonClicked);

// Simulate the button click:
StuffThatHappensOnButtonClick();

後者の方法には、ビジネス ロジックと UI ロジックを分離できるという利点があります。コントロール イベント ハンドラにビジネス ロジックを含めるべきではありません。

于 2012-08-29T18:52:46.377 に答える
6

はい、他の方法でメソッドを呼び出すだけです。例えば:

    private void btnSayHello_Click(object sender, EventArgs e)
    {
        MessageBox.Show("Hello World!");
    }

    private void btnTriggerHello_Click(object sender, EventArgs e)
    {
        btnSayHello_Click(null, null);
    }
于 2012-08-29T18:57:41.640 に答える
4
button1.PerformClick();

しかし、このようなことをしなければならない場合は、イベントの下にあるコードを新しいメソッドに移動する方がよいでしょうか?

于 2012-08-29T18:53:36.500 に答える