1

現在の状態に応じてさまざまなことを実行したい開始/停止ボタンを備えた単純なアプリケーションがあります。ボタンが開始状態の場合は、コードを実行してから停止状態に変更し、OnClickイベントをStopButton_Clickに変更します。その逆も同様です。

ボタンのクリック時プロパティを変更できないようです。そのため、以下のコードを使用して機能しますが、イベントのインスタンスを追加し続けます。最初のクリックは1回実行され、2回目のクリックは2回実行され、3回目のクリックは4回実行され、無限に実行されます。

StartButton.Click += new System.EventHandler(StartButton_Click);

と交互に

StartButton.Click += new System.EventHandler(StopButton_Click);

OnClickハンドラーを追加する代わりに置き換える方法はありますか?

4

3 に答える 3

1

新しいイベントハンドラーを追加する前に、イベントハンドラーを削除してみてください。

StartButton.Click-= StartButton_Click;

于 2012-12-07T23:24:34.360 に答える
1

1 つのオプションは、別のイベント ハンドラーを追加する前に以前のイベント ハンドラーを削除することですが、より簡単なオプションは、単一のイベント ハンドラーを使用することです。イベント ハンドラーは、何をすべきかを判断するために内部状態フィールドを調べることができます。これは、イベント ハンドラーを常に追加/削除するよりも簡単です。

次のようになります。

private void buttonClick(object sender, EventArgs args)
{
    if(buttonState == MyStateEnum.Start)
        PerformStartAction();
    else if(buttonState == MyStateEnum.Stop)
        PerformStopAction();
}

次に、イベント ハンドラーを追加/削除する代わりに、別の値を に割り当てる必要がありますbuttonState

于 2012-12-08T01:33:18.117 に答える
0

+=他のことと同じようにイベントを処理します。それはすでにあるものに追加されます。

-= で既存のイベント ハンドラーを削除してから、新しいイベント ハンドラーを追加してみてください。

于 2012-12-07T23:25:58.853 に答える