我正在构建一个简单的Windows窗体应用程序。每次更改控件的值时,控件都会触发将新值发送到对象的事件。
问题是我想在每次发生时将IsDirty bool设置为true。我当然可以在每个事件方法中编写IsDirty = true,但我想知道是否有更明智的方法 - 因为我有大量的控件。
我可以将IsDirty = true代码放入方法中,并在每次触发任何TextChanged或ValueChanged事件时运行吗?
答案 0 :(得分:5)
关于事件的好处是,一次可以订阅多个方法。 你总是可以写一个特殊的处理程序:
private void UpdateIsDirtyHandler(object sender, EventArgs e)
{
IsDirty = true;
}
在表单的Loaded事件中,遍历所有引发TextChanged事件的子控件(TextBoxes,ComboBoxes等)并将此处理程序附加到它们:
// psuedocode:
foreach( Control ctl in myForm.Controls )
{
if( ctl is TextBox )
{
((TextBox)ctl).TextChanged += UpdateIsDirtyHandler;
}
if( ctl is ComboBox ) { ... }
// etc...
}
如果您的表单有一组Model对象(一般来说这是一个很好的做法),那么您可以处理那里的“脏”跟踪逻辑。脏的跟踪并不总是适合您的模型 - 这取决于您的“IsDirty”概念是否仅适用于用户界面或模型。
答案 1 :(得分:0)
您可以按照here所述使用更改的事件。 您可以创建此事件的句柄,以将isDirty bool设置为true。
我认为你已经考虑过处理这个isDirty bool以及它将如何设置回false。否则,在第一次改变后它将保持正确。