2012-02-10 71 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// 
} 
相关问题