2012-02-10 36 views
0

だが、このコントロールイベントを呼び出さない方法はありますか?

private void MyComboBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    //do something// 
} 

ようなイベントComboBox_SelectedIndexChange何かがあると私はコンボボックスの値を変更する機能を持っているとしましょう。

Private void MyFunction() 
{ 
    MyComboBox.Text = "New Value"; 
} 

私はMyFunctionのはMyComboBoxの値を変えながらMyComboBox_SelectedIndexChangedイベントを呼び出すことを防ぐことができますか?

答えて

2

私はMyFunctionのはMyComboBoxの値を変えながらMyComboBox_SelectedIndexChangedイベントを呼び出すことを防ぐことができますか?

いいえ、できません。あなたは、コントロールからのイベントハンドラメソッドを外した値を設定し、コントロールにイベントハンドラメソッドを再接続することができます

  1. :あなたは同じことを実現どちらの二つの基本的なオプションを持っています。たとえば:

    private void MyFunction() 
    { 
        MyComboBox.SelectedIndexChanged -= MyComboBox_SelectedIndexChanged; 
        MyComboBox.Text = "New Value"; 
        MyComboBox.SelectedIndexChanged += MyComboBox_SelectedIndexChanged; 
    } 
    
  2. あなたは値がユーザーによってプログラムまたは更新されたかどうかを追跡しますクラスレベルのフィールドを宣言することができます。コンボボックスをプログラムで更新するときにフィールドを設定し、SelectedIndexChangedイベントハンドラーメソッドでその値を確認します。たとえば

    private bool allowComboBoxChange = true; 
    
    private void MyComboBox_SelectedIndexChanged(object sender, EventArgs e) 
    { 
        if (allowComboBoxChange) 
        { 
         //do something 
        } 
    } 
    
    private void MyFunction() 
    { 
        allowComboBoxChange = false; 
        MyComboBox.Text = "New Value"; 
        allowComboBoxChange = true; 
    } 
    
1

イベントハンドラをアタッチまたはデタッチすることができます。

//attach the handler 
MyComboBox.SelectedIndexChanged+=(sender,eventArgs)=> 
{ 
    //code 
}; 
//detach the handler 
MyComboBox.SelectedIndexChanged-=(sender,eventArgs)=> 
{ 
    //code 
}; 

それとも

Private void MyFunction() 
{ 
    comboBox1.SelectedIndexChanged -= new EventHandler(TestIt); 
    MyComboBox.Text = "New Value"; 
    comboBox1.SelectedIndexChanged += new EventHandler(TestIt); 
} 

private void TestIt(object sender, EventArgs e) 
{ 
    //do something// 
} 
関連する問題