簡體   English   中英

有什么辦法不叫控制事件?

[英]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嗎?

你不能。 您有兩個基本選項,它們都可以完成相同的任務:

  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; } 

您可以附加或分離事件處理程序。

//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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM