![](/img/trans.png)
[英]Is there any user control or master control in C# or any other way to call reusable code
[英]Is there any way not to call Control Event?
假設有一個事件ComboBox_SelectedIndexChange這樣的事情
private void MyComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
//do something//
}
而且我有一個功能,可以更改ComboBox的值。
Private void MyFunction()
{
MyComboBox.Text = "New Value";
}
我可以讓MyFunction防止在更改MyComboBox的值時調用事件MyComboBox_SelectedIndexChanged嗎?
我可以讓MyFunction防止在更改MyComboBox的值時調用事件MyComboBox_SelectedIndexChanged嗎?
你不能。 您有兩個基本選項,它們都可以完成相同的任務:
您可以從控件中解除事件處理程序方法的掛鈎,設置值,然后將事件處理程序方法重新附加到控件。 例如:
private void MyFunction() { MyComboBox.SelectedIndexChanged -= MyComboBox_SelectedIndexChanged; MyComboBox.Text = "New Value"; MyComboBox.SelectedIndexChanged += MyComboBox_SelectedIndexChanged; }
您可以聲明一個類級別的字段,以跟蹤該值是通過編程方式還是由用戶更新。 要以編程方式更新組合框時,請設置該字段,並在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; }
您可以附加或分離事件處理程序。
//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//
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.