检查表单数据是否已更改

时间:2011-09-16 02:07:54

标签: c#

我一直在尝试使用以下C#代码来检查表单数据是否在关闭和保存之前已经更改,但它似乎总是报告表单即使没有进行任何更改也会被更改。

//Declare a private variable
 private bool requiresSaving =false; 

 //Declare an event
 private void SomethingChanged(object sender, EventArgs e) 
 { 
      requiresSaving  = true; 
 } 

 //Hook up this event to the various changed events, eg
 this.txtNameDepart.TextChanged += new System.EventHandler(this.SomethingChanged); 


//Check this variable when you are closing the form
private void DepartamentEdit_FormClosing(object sender, FormClosingEventArgs e) 
{ 
if (requiresSaving) 
{ 
  .... 

您还需要在saveDepart方法中设置requiresSaving false。

2 个答案:

答案 0 :(得分:2)

我认为即使在加载初始数据之前,您也会挂钩这些事件。然后SomethingChanged触发并启用保存按钮,即使用户没有改变任何内容。

您可以在加载默认/现有数据时取消挂钩这些事件,也可以在加载默认/现有数据后挂钩这些事件。

//Un-Hook when loading your default/existing data.
 private void SetDefaultData()
 {
     this.txtNameDepart.TextChanged -= new System.EventHandler(this.SomethingChanged); 
     this.txtNameDepart = "My default text";
     this.txtNameDepart.TextChanged += new System.EventHandler(this.SomethingChanged); 
 }

答案 1 :(得分:0)

你应该将你设置标志的所有地方都显示为true,以防万一。

也是这段代码:

//Hook up this event to the various changed events, eg
 this.txtNameDepart.TextChanged += new System.EventHandler(this.SomethingChanged)

即使理解你想要做什么,我认为这很糟糕,因为如果你有很多控件,很快或者你将很快处理每个更改事件的逻辑,并为每个控件添加一些更具体的代码,你不应该附加同时为所有人提供相同的事件处理程序。

如果所有控件都绑定到BindingSource,则可以使用其他方法。

如果您的控件是由表单加载时业务对象的某些赋值手动填充的,您还可以想象将此对象的属性与原始属性进行比较(如果您还保存了原始文档的副本) form_closing。