在我的项目中,我有一个设置窗体。如果发生任何变化,我必须通知用户如果他想离开该页面而不保存更改。在这个时候,我通过捕捉每一个控制变化事件来做到这一点。我确信有更好的方法 - 比如从容器中捕获更改事件。可能吗?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. WPF捕捉控件
- 4. 如何捕捉QML中的变化值的Spinbox事件?
- 5. 捕捉浏览器的音量事件
- 6. 如何用jQuery捕捉<select >的变化事件?
- 7. 捕捉浏览器关闭事件
- 8. 如何用history.js捕捉状态变化事件?
- 9. 在Drupal中捕捉块变化/添加/删除事件
- 10. 捕捉鼠标事件
- 11. 事件 - 只捕捉Qt.Key_Delete
- 12. 如何捕捉dojox.mobile.view事件?
- 13. 捕捉onclick adsense事件?
- 14. 捕捉缩小事件
- 15. 在VBScript中捕捉事件
- 16. 捕捉鼠标事件
- 17. 如何让UITableView(控制器)捕捉多点触摸事件?
- 18. 捕捉浏览器关闭事件没有刷新事件
- 19. JavaScript:捕捉URI变化
- 20. 如何在控件被另一个控件覆盖时捕捉事件?
- 21. 如何在Android上捕捉图像捕捉事件?
- 22. 如何捕捉RichEdit上的OnScroll事件?
- 23. WPF如何捕捉的ContextMenuClosing事件
- 24. 如何捕捉PHP中的exit()事件?
- 25. 捕捉Flash Player的事件在Javascript
- 26. 如何捕捉视频的事件ExitFullScreen?
- 27. c#计数器变化事件
- 28. 控件在Visual Studio 2010中的捕捉
- 29. 的控制捕捉鼠标点击事件
- 30. TinyMCE捕捉点击按钮事件
Web,WPF,Winforms?听起来像网络,但不能肯定... – 2010-09-22 05:37:17
这是一个窗口窗体。 – Barun 2010-09-22 05:44:51