我一直在尝试使用以下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。
答案 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。