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

解决方案 »

  1.   

    如果要求不是很高的话,可以用TextBox的Modified属性来判断,
    如果要求很高的话,那么你要在把数据加载到每个TextBox后做一个用来比较的副本,当程序关闭的时候把每一个文本框的内容和原来的副本比较,如果有一个不同也是有了改动,则保存.
      

  2.   

    其实你那个方法就是不错的方法,有时候不要太懒以为有什么好方法。你可以把所有控件的TextChange都指向同一个事件处理程序,这样编程量就可以小一些。
      

  3.   

    如果要求不是很高的话,可以用TextBox的Modified属性来判断,
    如果要求很高的话,那么你要在把数据加载到每个TextBox后做一个用来比较的副本,当程序关闭的时候把每一个文本框的内容和原来的副本比较,如果有一个不同也是有了改动,则保存.
    --------------------此方法是正解。如果是对某个Textbox的内容删除了,之后又填写了,但与之前的内容一样,没有发生变化的话,用textbox的TextChange事件处理,就会认为是内容修改了,但实际上没有修改。主要看LZ的程序的要求了,如果认为只要变化了(不论与原来内容是否相同)就提示,那就无所谓哪种方法了。
      

  4.   

    刚才试验过了
    如楼上说的“对某个Textbox的内容删除了,之后又填写了,但与之前的内容一样,没有发生变化的话,用textbox的TextChange事件处理,就会认为是内容修改了,但实际上没有修改。”
      

  5.   

    不可以用textbox.databindings吗然后用DataAdapter.Update里的DataViewRowState.ModifiedCurrent判断
      

  6.   

    方法1是绑定数据,好解决
    方法2是save前写个循环判断一下每个textbox的值是不是等于初始的class的各字段的值
    方法3是TextChanged事件能想到的就这么多了
      

  7.   

    你的这六十个TextBox是绑定的数据库的吗?如果是绑定的,那就简单多了...如果需要请说明..
      

  8.   

    TextBox没有绑定数据库
    当初设计时没考虑到我是手动写SQL的
      

  9.   

    要求没那么高的话就用TextChange吧,
    反正这些textbox共用一个事件方法,也就几行代码.
      

  10.   

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