在我的项目中,我有一个设置表单。如果发生任何变化,我必须通知用户,如果他想离开该页面而不保存他的更改。在这个时候,我通过捕捉每一个控制变化事件来做到这一点。我确信有更好的方法 - 比如从容器中捕获更改事件。有可能吗?
答案 0 :(得分:4)
如何直接创建一个从System.ComponentModel实现接口的Settings类,如INotifyPropertyChanged和IDataErrorInfo,并使用数据绑定来获取控件中的值。
您的“设置”类不仅可以记录是否有任何更改,还可以更轻松地验证用户输入。
一个好的起点是MSDN。
答案 1 :(得分:1)
您有正确的解决方案,但您可能希望对捕获更改事件非常通用。例如,您可以在构造函数中的InitializeComponent();
行之后尝试这样的事情:
foreach(Control c in Controls) {
c.TextChanged += new EventHandler(genericTextBox_TextChanged);
}
genericTextBox_TextChanged
会将表单范围的hasChanged
标志设置为true,或者像这样的基本内容。您可能需要将其转换为递归函数,如果它具有子控件,则循环遍历c
的所有子项。
答案 2 :(得分:1)
让我给你一些解决方法。我的提议是创建一个自定义DataSet。然后添加对应于表单控件的表。在此之后,您可以将每个表单控件绑定到此数据集。
优点:您保持所有控件数据绑定。所以你不需要关心特定控件的更改。您只需要控制数据集更改。
缺点(可能):在此之后您应该重写设置预览机制。您必须更改数据,而不是更改控件。 IMO,它并不是那么难,但我不知道你的应用程序中的这种方法。我认为这种方法至少可以很容易地调试。
答案 3 :(得分:0)
如果是网络,请查看javascript的卸载事件