メソッドFoo
が一方のコントロールのイベントをBar
処理し、メソッドが他方のイベントを処理する場合、のコントロールFoo
の値を変更する必要があり、Bar
その逆も同様です。ただし、どこかでコントロール変数を使用する必要があります (たとえば、イベントを発生させたコントロールへの参照は良い考えです)。そのため、次のようFoo
に呼び出されます。
Foo
Bar
のコントロールの値を更新します。
Bar
のコントロールがそのイベントを発生させ、Bar
呼び出されます。
Bar
最初にショットしたコントロールの参照をチェックし、それがそのコントロールではないことを確認し、何もしません。
にも同じロジックが適用されBar
ます。
そうすれば、無限ループに陥ることはありません。
コードでは、次のようになります。
nud1.ValueChanged += new Eventhandler(Foo);
nud2.ValueChanged += new Eventhandler(Bar);
NumericUpDown shooter = null;
private void Foo (object sender, EventArgs e)
{
if (this.shooter == null)
{
this.shooter = nud1;
nud2.Value = nud1.Value;
}
else this.shooter = null;
}
private void Bar (object sender, EventArgs e)
{
if (this.shooter == null)
{
this.shooter = nud2;
nud1.Value = nud2.Value;
}
else this.shooter = null;
}
もちろん、これは大まかな例です (たとえば、両方のコントロールの値が常に変化していると想定しています。状況に合わせて調整してください。