0

我正在构建一个简单的 Windows 窗体应用程序。每次更改控件的值时,控件都会触发将新值发送到对象的事件。

问题是每次发生这种情况时,我都想将 IsDirty bool 设置为 true。我当然可以在每个事件方法中写 IsDirty = true,但我想知道是否有更巧妙的方法来执行此操作 - 因为我有大量控件。

我可以将我的 IsDirty=true 代码放在一个方法中,并让它在每次触发任何 TextChanged 或 ValueChanged 事件时运行吗?

4

2 回答 2

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...
}

如果您的表单有一组模型对象(这通常是一个很好的做法),您可以在那里处理“脏”跟踪逻辑。脏跟踪并不总是适合您的模型 - 这取决于您的“IsDirty”概念是否仅适用于用户界面或模型。

于 2013-06-18T20:45:51.820 回答
0

您可以使用此处描述的更改事件。您可以创建此事件的句柄以将 isDirty bool 设置为 true。

我假设您已经考虑过处理这个 isDirty bool 以及如何将其设置回 false。否则在第一次更改后它仍然是正确的。

于 2013-06-18T20:51:58.903 回答