如窗体上有10textBox控件,其中一个控件的值被修改了,当点击放弃按钮时如何判断窗体上的值有改变,从而提醒用户是否要保存.

解决方案 »

  1.   

    TextChanged
    sender as TextBox,  设置标识
    取值foreach(Control c is this.Controls)
    {]
      

  2.   

    绑定的话,可以通过DataSet的HasChanges获得,非绑定的话,只能一个一个的和初始值去比较了.
    也可以弄一个窗体级变量,在任何一个TextBox的TextChanged事件中,修改这个值,通过判断这个值确定是否有未保存数据
      

  3.   

    以上方法都需要写很多的TextChanged事件。
    是否还有更优的方法?
      

  4.   

    List<string> str=new list<string>;
    str.add(tbx1.text);
    str.add(tbx2.text);
    退出时依次对比就行了
      

  5.   

    如果你没有别的逻辑需求,这个也好办,你只写一个事件处理程序,然后将每一个TextBox的TextChanged事件全都关联到这个事件中不就行了!
      

  6.   

    在FormLoad的时候 你会知道需要加载的数据,在点击确定按钮的时候,你在读取一次页面上面的数据,这两次的数据都保存在结构相同的实体对象中,你只需要比较这两个实体对象是否相同就可以了
      

  7.   

    不论如何 TextChanged是不可能放弃的,,除非你要用更麻烦的办法最简单的  Dictionary<string,bool>   
    第一个string  存 textbox的名字    第二个存是否保存
    当textchanged的时候  就把当前textbox对应的 键值改成 true  
    Close窗体前  只要 ContaintValue(好像是  忘了 反正有检查是否存在某值的) 有 true 提醒保存
    具体如何保存  遍历字典   哪个是true就保存哪个
      

  8.   

    把以下代码复制到要监视的窗口中,m_HasChanges 表示窗口是否有编辑框被修改
    [StructLayout( LayoutKind.Explicit)]
            private struct IntToWord //自定义取DWORD高低位的Union结构
            {
                [FieldOffset(0)]
                public IntPtr wParam;
                [FieldOffset(0)]
                public Int16 LOW;
                [FieldOffset (2)]
                public Int16 HI;
            }
            
            private const Int32 WM_COMMAND = 0x0111;
            
            private const Int32 EN_CHANGE = 0x0300;
            
            private bool m_HasChanges = false;//用于保存窗口是否更改,值为true时说明有文本框发生过修改
            
            protected override void OnLoad(EventArgs e)//在Load事件中置修改状态为false
            {
                base.OnLoad(e);
                m_HasChanges = false;
            }
            
            protected override void WndProc(ref Message m)
            {            if (m.Msg == WM_COMMAND )
                {
                    IntToWord itow = new IntToWord();
                    itow.wParam = m.WParam;
                    if (itow.HI   == EN_CHANGE ) //收到控制的修改通知
                    {
                        m_HasChanges = true;//设窗体的个修改状态为true
                    }
                }
                base.WndProc(ref m);
            }
      

  9.   


    赞同这句
    绑定的话,可以通过DataSet的HasChanges获得,非绑定的话,只能一个一个的和初始值去比较了.TextChanged实现当然可以,但很不友好,比如人家删除,又撤销了,还要提示是否保存。
      

  10.   

    定义一个HASH表  作用如下
    当text获得焦点的时候将当前text的值和ID保存到表中
    当用户放弃的时候根据ID获取当前控制中的值和HASH表中的值比较如果不同就提示用户是否需要保存
      

  11.   

    窗体的TextChanged事件和窗体的closing事件...
    两个加在一起在closing事件的时候处理.
      

  12.   

    遍历出窗体中的textBox  判断他们的 Modified属性  应该就可以了吧! 
      

  13.   

    遍历TextBox控件,检查 Modified 属性是否为true,为true表示修改过
      

  14.   

    可以判断modified的属性 也可以在TextChanged事件中加上一个标识来判断