3

頼むのは難しいかもしれませんが、頑張ってください。変更時にイベントトリガーを作成することに関する SO や他の場所の多くのことですが、私は反対のことを望んでいます (少なくとも私はそう思います!)。

フォーム ( ) にいくつかのコントロールがありnumericUpDownsます。アップダウンごとに、値が変更され、「ValueChanged」メソッドがトリガーされるかどうかを監視しています。

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
    //do some complicated code ...
} 

フォームの再計算を引き起こすアップダウンコントロールへの変更ですべてうまく機能していますが、メソッドにいくつかの値を設定しValueChanged、最後までメソッドを呼び出さない場合はどうすればよいですか?

私はほとんどこのようなものが欲しいです

// start ignoring form events here
numericUpDown1.Value = 500;
numericUpDown2.Value = 50;
numericUpDown3.Value = 0;
// resume detecting form events here !

これをオンまたはオフにする方法はありますか?それは私が心配すべきことですか?

私の限られた C# の知識が私をこのポイントに導く最良の方法は、" bIgnoreEvents" という変数を作成し、それを私の各メソッドで使用することValueChangedです ...

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
    if (!bIgmoreEvents)
    {
        //do some complicated code ...
    }
}

これはコードをスキップしますが、面倒です。もっと簡単な方法はありますか?

4

1 に答える 1

6

これを行うこともできます:

var eventHandler = new EventHandler((o, a) =>
{
    //do stuff
});

numericUpDown1.ValueChanged += eventHandler;

//normal behaviour

//remove eventHandler    
numericUpDown1.ValueChanged -= eventHandler;

numericUpDown1.Value = 500;
numericUpDown2.Value = 50;
numericUpDown3.Value = 0;

//add eventHandler
numericUpDown1.ValueChanged += eventHandler;
于 2012-07-23T11:32:59.190 に答える