2012-02-10 69 views
0

比方說,有事件ComboBox_SelectedIndexChange這樣的有沒有辦法不打電話給控制事件?

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

,我有哪些更改組合框的值的函數。

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// 
} 
相關問題