我可以通过某种类型的任何事件触发方法

时间:2013-06-18 20:40:13

标签: c# windows winforms visual-studio

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

问题是我想在每次发生时将IsDirty bool设置为true。我当然可以在每个事件方法中编写IsDirty = true,但我想知道是否有更明智的方法 - 因为我有大量的控件。

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

2 个答案:

答案 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。否则,在第一次改变后它将保持正确。