如窗体上有10textBox控件,其中一个控件的值被修改了,当点击放弃按钮时如何判断窗体上的值有改变,从而提醒用户是否要保存.
解决方案 »
- C#聊天问题
- C/S软件 500条线程是否太多?
- winForm中使用了propertyGrid,当propertyGrid属性值修改后,如何保存?
- 用vs2005制作安装程序,如何自动检测有没有安装Msxml6.0 parser?
- C# 怎么实现点击button就可以把磁盘上的execl文本文件导入orcle数据库,
- .NET C# 用NotifyIcon编写托盘时,出现N多Icon尸体,怎办?
- 有没有最简便的方法"删除树的所有二级节点呢"?(winodws)
- 请问一下大家,谢谢!
- webservice中如何调用可执行文件?
- 做过CA认证的请进,讨论学习。
- C#中的数组有没有返回最小值的和他的下标的功能?
- aspx动态网站,如何转成静态html?
sender as TextBox, 设置标识
取值foreach(Control c is this.Controls)
{]
也可以弄一个窗体级变量,在任何一个TextBox的TextChanged事件中,修改这个值,通过判断这个值确定是否有未保存数据
是否还有更优的方法?
str.add(tbx1.text);
str.add(tbx2.text);
退出时依次对比就行了
第一个string 存 textbox的名字 第二个存是否保存
当textchanged的时候 就把当前textbox对应的 键值改成 true
Close窗体前 只要 ContaintValue(好像是 忘了 反正有检查是否存在某值的) 有 true 提醒保存
具体如何保存 遍历字典 哪个是true就保存哪个
[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);
}
赞同这句
绑定的话,可以通过DataSet的HasChanges获得,非绑定的话,只能一个一个的和初始值去比较了.TextChanged实现当然可以,但很不友好,比如人家删除,又撤销了,还要提示是否保存。
当text获得焦点的时候将当前text的值和ID保存到表中
当用户放弃的时候根据ID获取当前控制中的值和HASH表中的值比较如果不同就提示用户是否需要保存
两个加在一起在closing事件的时候处理.