2011-02-07 9 views
2

私は、レジストリを介して起動するために追加されるアプリケーションに関するチェックボックスを持つWindowsフォームアプリケーションを作成しています。ユーザーがチェックボックスをオンにすると、CheckedChangedイベントハンドラは、アプリケーションをレジストリに追加しようとするメソッドをトリガします。なんらかの理由でこれが失敗した場合は、チェックボックスをチェックされていない状態に戻したいが、そうすることで再帰的にメソッドがトリガされる。どうすればこれを避けることができますか?メソッドがトリガーされないようにするにはどうすればよいですか?

同様に、アプリケーションが最初に読み込まれるとき、私はレジストリを見て、チェックボックスの初期状態を設定します。プログラムでチェックボックスの状態を設定すると、偶数のハンドラが起動しますが、これは嫌です。

偶数ハンドラがCheckedChangedメソッドをトリガできないようにする方法はありますか?

答えて

2

単純なフラグで十分です。

bool flag; 

void ClickEventHandler(Object server, EventArgs e) 
{ 
    if (flag) return; 
    .... 
} 

フラグを適切に設定します。

4

簡単な方法は、ハンドラを切断し、それを再接続するために、次のようになります。

void CheckCbxProgrammatically(bool check) 
{ 
    myCbx.CheckedChanged -= HandleCheckedChanged; 
    myCbx.Checked = check; 
    myCbx.CheckedChanged += HandleCheckedChanged; 
} 

あなたはそれを避けることができたときの状態を両立する必要はありません。

+1

これは間違いなく機能しますが、イベントハンドラを登録解除して登録するオーバーヘッドがあります。 –

+2

@Pauloそのオーバーヘッドは些細なものです –

+1

代替ルートをありがとうございますが、私はグローバル変数を使用すると思います。 – xbonez

2

このようなケースでは、グローバルbool isCalledManuallyを宣言し、イベントをトリガーしたくない場合はtrueに設定します。イベントの場合:

If(isCalledManually) 
    isCalledManually = false; 
Else 
    // do your operations. 
関連する問題