我正在构建一个简单的 Windows 窗体应用程序。每次更改控件的值时,控件都会触发将新值发送到对象的事件。
问题是每次发生这种情况时,我都想将 IsDirty bool 设置为 true。我当然可以在每个事件方法中写 IsDirty = true,但我想知道是否有更巧妙的方法来执行此操作 - 因为我有大量控件。
我可以将我的 IsDirty=true 代码放在一个方法中,并让它在每次触发任何 TextChanged 或 ValueChanged 事件时运行吗?
我正在构建一个简单的 Windows 窗体应用程序。每次更改控件的值时,控件都会触发将新值发送到对象的事件。
问题是每次发生这种情况时,我都想将 IsDirty bool 设置为 true。我当然可以在每个事件方法中写 IsDirty = true,但我想知道是否有更巧妙的方法来执行此操作 - 因为我有大量控件。
我可以将我的 IsDirty=true 代码放在一个方法中,并让它在每次触发任何 TextChanged 或 ValueChanged 事件时运行吗?
事件的好处是一次可以订阅多个方法。您总是可以编写一个特殊的处理程序:
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...
}
如果您的表单有一组模型对象(这通常是一个很好的做法),您可以在那里处理“脏”跟踪逻辑。脏跟踪并不总是适合您的模型 - 这取决于您的“IsDirty”概念是否仅适用于用户界面或模型。
您可以使用此处描述的更改事件。您可以创建此事件的句柄以将 isDirty bool 设置为 true。
我假设您已经考虑过处理这个 isDirty bool 以及如何将其设置回 false。否则在第一次更改后它仍然是正确的。