如何在WinForms中暫時禁用事件處理程序?WinForms:暫時禁用事件處理程序
29
A
回答
47
可能,(它不需要退訂或其他的東西)的最簡單方法是定義一個布爾值,並在處理程序開始檢查:
bool dontRunHandler;
void Handler(object sender, EventArgs e) {
if (dontRunHandler) return;
// handler body...
}
+2
這很簡單,但如果你經常使用它,代碼會很混亂。 – maamaa 2015-12-03 04:26:13
40
禁止從什麼角度?如果要刪除這是從對處理程序委託的列表中選擇範圍的方法,你可以做..
object.Event -= new EventHandlerType(your_Method);
這將從代表的列表中刪除該方法,並且以後可以重新連接它與
object.Event += new EventHandlerType(your_Method);
1
我這樣做,使用控制擴展。
public static void SetDatasource(
this ComboBox cb,
object dataSource,
EventHandler _SelectedIndexChanged_eventHandler = null,
EventHandler _SelectedValueChanged_eventHandler = null)
{
//disable events
if (_SelectedIndexChanged_eventHandler != null) cb.SelectedIndexChanged -= _SelectedIndexChanged_eventHandler;
if (_SelectedValueChanged_eventHandler != null) cb.SelectedValueChanged -= _SelectedValueChanged_eventHandler;
if (cb.InvokeRequired)
{
cb.BeginInvoke(new _d_SetDatasource_ComboBox(SetDatasource), new object[] { cb, dataSource, _SelectedIndexChanged_eventHandler});
}
else
{
cb.DataSource = dataSource;
//events enabled again
if (_SelectedIndexChanged_eventHandler != null) cb.SelectedIndexChanged += _SelectedIndexChanged_eventHandler;
if (_SelectedValueChanged_eventHandler != null) cb.SelectedValueChanged += _SelectedValueChanged_eventHandler;
}
}
private delegate void _d_SetDatasource_ComboBox(ComboBox cb, object dataSource, EventHandler _SelectedIndexChanged_eventHandler = null, EventHandler _SelectedValueChanged_eventHandler = null);
相關問題
- 1. 暫時禁止jQuery事件處理
- 2. WinForms和事件處理程序
- 3. 暫時禁用所有當前活動的jQuery的事件處理程序
- 4. 調用.NET WinForms事件處理程序的時機
- 5. 暫時禁用「viewchangeend」事件
- 6. 我可以暫時禁用處理程序嗎?
- 7. 暫時禁用JS事件並學習JS事件處理如何工作
- 8. 暫時禁止PyQt事件?
- 9. 劍道拖動 - 暫停從拖動事件處理程序暫時拖着
- 10. 處理時禁用觸摸事件
- 11. HTML事件處理程序與React事件處理程序
- 12. GORM - 暫時禁用beforeInsert事件
- 13. 暫時禁用點擊事件
- 14. 胡椒:暫時禁用事件
- 15. Backbone.js - 暫時禁用(事件中)查看
- 16. 禁用並啓用div事件處理程序點擊jQuery?
- 17. 如何在MFC中啓用或禁用事件處理程序?
- 18. 在Razor中禁用並啓用事件處理程序
- 19. 實時附加事件處理程序
- 20. C#計時器事件處理程序
- 21. Winforms生成的事件和刪除處理程序
- 22. 事件處理程序來檢測圖片框(的WinForms,C#)
- 23. 事件處理程序訪問修飾符MFC vs C#WinForms
- 24. winforms文本框驗證事件處理程序停止運作
- 25. C#暫時取消分配序列化的事件處理程序?
- 26. 處理程序不處理事件
- 27. Reactive extensions處理事件處理程序
- 28. 事件處理程序事件處理程序不調用上單擊按鈕
- 29. 如何在事件處理程序中間暫停UI?
- 30. 「暫停」執行,但保持事件處理程序運行?
你能分享一下你在做什麼嗎?因爲您可能不希望禁用_ALL_事件處理程序(該窗體的默認繪畫和移動處理程序會讓人想到)。 – 2009-04-13 16:38:56
我只是不想在程序更新時捕獲控件狀態的變化。是的,我不想禁用_ALL_事件處理程序,只是「事件處理程序」。 http://stackoverflow.com/questions/744436/winforms-two-way-textbox-problem – George 2009-04-13 16:53:40