日期:2014-05-20  浏览次数:20851 次

如何实现 窗体内容改变,如果未保存,关闭时提示保存?
窗体内有六十多个TextBox   现在想到的方法是定义一个全局变量hasChange   =   false如果有改动则变为true   提交了则变为false   在Closeing事件判断hasChange的值并进行相应的操作  
现在我想问一下如何判断有改动?能想到的就是就是在每个textbox的TextChange事件里把hasChange   给变为true   有没有其他的方法?

------解决方案--------------------
如果要求不是很高的话,可以用TextBox的Modified属性来判断,
如果要求很高的话,那么你要在把数据加载到每个TextBox后做一个用来比较的副本,当程序关闭的时候把每一个文本框的内容和原来的副本比较,如果有一个不同也是有了改动,则保存.
------解决方案--------------------
其实你那个方法就是不错的方法,有时候不要太懒以为有什么好方法。

你可以把所有控件的TextChange都指向同一个事件处理程序,这样编程量就可以小一些。
------解决方案--------------------
如果要求不是很高的话,可以用TextBox的Modified属性来判断,
如果要求很高的话,那么你要在把数据加载到每个TextBox后做一个用来比较的副本,当程序关闭的时候把每一个文本框的内容和原来的副本比较,如果有一个不同也是有了改动,则保存.
--------------------

此方法是正解。如果是对某个Textbox的内容删除了,之后又填写了,但与之前的内容一样,没有发生变化的话,用textbox的TextChange事件处理,就会认为是内容修改了,但实际上没有修改。

主要看LZ的程序的要求了,如果认为只要变化了(不论与原来内容是否相同)就提示,那就无所谓哪种方法了。
------解决方案--------------------
不可以用textbox.databindings吗

然后用DataAdapter.Update里的DataViewRowState.ModifiedCurrent判断
------解决方案--------------------
方法1是绑定数据,好解决
方法2是save前写个循环判断一下每个textbox的值是不是等于初始的class的各字段的值
方法3是TextChanged事件

能想到的就这么多了

------解决方案--------------------
要求没那么高的话就用TextChange吧,
反正这些textbox共用一个事件方法,也就几行代码.
------解决方案--------------------
“对某个Textbox的内容删除了,之后又填写了,但与之前的内容一样,没有发生变化的话,用textbox的TextChange事件处理,就会认为是内容修改了,但实际上没有修改。”
这个问题可以通过把初始值保存到Control.Tag属性中,在TextChanged属性发生时,比较新值和Tag属性的值,当然,如果有需要可以更新Control.Tag属性值。