如何实现 窗体内容改变,如果未保存,关闭时提示保存?
窗体内有六十多个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属性值。