在我的項目中,我有一個設置窗體。如果發生任何變化,我必須通知用戶如果他想離開該頁面而不保存更改。在這個時候,我通過捕捉每一個控制變化事件來做到這一點。我確信有更好的方法 - 比如從容器中捕獲更改事件。可能嗎?C#捕捉控件的容器變化事件
回答
你有正確的解決方案,但你可能想約捕獲更改事件非常通用。例如,你可以在構造函數中InitializeComponent();
線後嘗試這樣的權利:
foreach(Control c in Controls) {
c.TextChanged += new EventHandler(genericTextBox_TextChanged);
}
genericTextBox_TextChanged
會形式,廣泛hasChanged
標誌設置爲true,或一些真正的基本類似。如果它有子控件,則可能需要將其作爲循環遍歷所有c
子項的遞歸函數。
如果它的網頁,看看卸載事件的JavaScript
沒有直接擔心控件,而是如何創建一個Settings類,實現類似INotifyPropertyChanged和IDataErrorInfo的System.ComponentModel接口,並使用數據綁定來獲取控件的值。
您的設置類不僅可以記錄是否有任何更改,還可以更容易地驗證用戶輸入。
一個好的開始是MSDN。
聽起來有趣。你能否澄清一下呢? – Barun 2010-09-22 06:07:47
這個背後的基本思想是爲每個設置創建一個具有屬性的Settings類,並讓每個屬性的setter更新該類的HasChanged標誌。當表單打開時,您傳遞一個設置實例並將您的控件綁定到相應的屬性。當用戶關閉表單時,您可以檢查HasChanged標誌並提示用戶設置是否已更改。關鍵是要確保你有一種方法可以在用戶不想保存的情況下恢復原狀,這是通過使類可克隆並在克隆副本上工作直到他們保存爲止最容易完成的。 – 2010-09-22 06:15:00
讓我爲您提供某種解決方法。
我的建議是創建一個自定義數據集。然後添加對應於表單控件的表格。在此之後,您可以將每個表單控件綁定到此數據集。優點:您保留所有控件數據綁定。所以你不需要關心特定控制的變化。您只需控制數據集更改。
缺點(也許):在此之後,你應該重寫設置預覽機制。您不必更改控件,而必須更改數據。海事組織,它並不難,但我不知道你的應用程序中的這種方法
我認爲這種方法至少易於調試。
一些例子會非常有幫助。 – Barun 2010-09-22 06:30:13
- 1. 捕捉事件
- 2. 捕捉事件
- 3. 控件失去子控件時的捕捉事件
- 4. WPF捕捉控件
- 5. 如何捕捉QML中的變化值的Spinbox事件?
- 6. 捕捉瀏覽器的音量事件
- 7. 如何用jQuery捕捉<select >的變化事件?
- 8. 如何在tableViewer中捕捉變化焦點的事件?
- 9. 捕捉變化 - rtcltk
- 10. 捕捉瀏覽器關閉事件
- 11. 如何捕捉extjs4控制器中的imageclick事件
- 12. 如何捕捉控制器中的子視圖事件?
- 13. 如何用history.js捕捉狀態變化事件?
- 14. 在Drupal中捕捉塊變化/添加/刪除事件
- 15. 如何捕捉WiFi狀態變化事件
- 16. 捕捉HID鍵盤事件
- 17. 捕捉onclick adsense事件?
- 18. 事件 - 只捕捉Qt.Key_Delete
- 19. 如何捕捉dojox.mobile.view事件?
- 20. 捕捉縮小事件
- 21. 捕捉鼠標事件
- 22. 捕捉鼠標事件
- 23. 在VBScript中捕捉事件
- 24. 如何捕捉dropzonejs插件的事件
- 25. jQuery droppable容器不總是捕捉放置事件
- 26. jQuery沒有捕獲移動滑塊控件的變化事件
- 27. 如何讓UITableView(控制器)捕捉多點觸摸事件?
- 28. 捕捉瀏覽器關閉事件沒有刷新事件
- 29. wordpress - 捕捉插件保存事件
- 30. 從用戶控件捕捉按鈕事件
Web,WPF,Winforms?聽起來像網絡,但不能肯定... – 2010-09-22 05:37:17
這是一個窗口窗體。 – Barun 2010-09-22 05:44:51