我的C#應用程序有comboBox
與SelectedIndexChanged
事件。通常情況下,我希望這個事件能夠觸發,但是有時候我需要這個事件不會觸發。我的comboBox
是一個MRU文件列表。如果發現列表中的文件不存在,則將該項目從comboBox
中移除,並將comboBox
SelectedIndex
設置爲零。但是,將comboBox
SelectedIndex
設置爲零會導致觸發SelectedIndexChanged
事件,在這種情況下,該事件有問題,因爲它會導致某些UIF代碼在事件處理程序中運行。有沒有優雅的方式來禁用/啓用C#表單控件的事件?謝謝。修改組合框SelectedIndex而不觸發C事件#
7
A
回答
11
與
ComboBox combo = sender as ComboBox;
if (combo.SelectedIndex == 0)
{
return;
}
啓動事件處理方法,如果你的問題是有不同的事件處理程序,你可以先刪除該事件處理程序的事件註冊。
combo.SelectedIndexChanged -= EventHandler<SelectedIndexChangedEventArgs> SomeEventHandler;
combo.SelectedIndex = 0;
combo.SelectedIndexChanged += EventHandler<SelectedIndexChangedEventArgs> SomeEventHandler;
1
一(相當醜陋的)的方式是設置在刪除該條目中的代碼標誌,然後檢查,在SelectedIndexChanged
處理:
if (!deletedEntry)
{
// Do stuff
}
deletedEntry = false;
一個更好的辦法可能是刪除您SelectedIndexChanged
事件處理程序在刪除方法的開始,並在最後恢復它。這樣你的代碼就不會知道索引已經改變了。
8
多年來我遇到過這麼多次。我的解決方案是有一個名爲_noise的類級變量,如果我知道即將更改組合索引或任何其他類似的控件,當選定的索引更改時觸發,我會在代碼中執行以下操作。
private bool _noise;
這裏是控件的事件處理程序的代碼
private void cbTest_SelectedIndexChange(object sender, EventArgs e)
{
if (_noise) return;
// process the events code
...
}
後來,當我知道我要改變索引,我請執行下列操作:
_noise = true; // cause the handler to ignore the noise...
cbTest.Index = value;
_noise = false; // let the event process again
3
我很驚訝沒有這樣做的更好的方式,但這是我做到這一點的方式。我實際上使用大多數控件的Tag
字段,所以我不必爲控件進行子類化。並且我使用true
/null
作爲值,因爲null
是默認值。
當然,如果你實際使用Tag
,你需要以不同的方式做到這一點...
在處理程序:
private void control_Event(object sender, EventArgs e)
{
if (control.Tag != null) return;
// process the events code
...
}
在主代碼
try
{
control.Tag = true;
// set the control property
control.Value = xxx;
or
control.Index = xxx;
or
control.Checked = xxx;
...
}
finally
{
control.Tag = null;
}
相關問題
- 1. Messagebox.Show引發組合框SelectedIndex/Value更改事件?
- 2. 爲更改而觸發的組合框事件 - 和 - 添加值
- 3. selectedIndex更改後觸發onChange事件?
- 4. GridView中的Dropdownlist不會觸發selectedindex更改事件
- 5. 當SelectedIndex被更改時ListBox不會觸發OnSelectedIndexChanged事件
- 6. 訪問VBA - 觸發組合框更改事件
- 7. 組合框在每個按鍵上觸發更改事件
- 8. 組合框更改事件每次都在Excel中觸發VBA
- 9. Flash/Actionscript2 - 無法獲取組合框「更改」事件觸發
- 10. 如何用組合框更改事件觸發代碼
- 11. ExtJS定義組合框更改事件沒有觸發
- 12. 組合框選中文本更改事件未觸發
- 13. Silverlight組合框SelectedIndex已更改加載其他控件組件
- 14. 組合框更改事件
- 15. 如何檢測由組合框的DropDown事件觸發的事件(c#)
- 16. 組合框觸發
- 17. 組合框上的事件偵聽器不會觸發EXTJS 4
- 18. ListBox中的組合框不會觸發SelectionChanged事件
- 19. 組合框的SelectedIndex MVVM WPF
- 20. MVVM組合框SelectedIndex與SelectedItem
- 21. 組合框丟失SelectedIndex
- 22. c#不想觸發事件
- 23. 不觸發事件C#WPF
- 24. C#MediaPlayer.MediaEnded事件不觸發
- 25. C#COM事件不觸發
- 26. 更改事件觸發的選擇框
- 27. Silverlight組合框SelectedIndex不會改變綁定
- 28. jQueryMobile複選框觸發整個控件組的更改事件
- 29. C#觸發事件
- 30. WPF組合框觸發Validation.HasError