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

Chr*_*fer 0 c# windows visual-studio winforms

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

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

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

LBu*_*kin 5

关于事件的好处是可以一次订阅多个方法.你总是可以写一个特殊的处理程序:

private void UpdateIsDirtyHandler(object sender, EventArgs e)
{
    IsDirty = true;
}
Run Code Online (Sandbox Code Playgroud)

在表单的Loaded事件中,迭代所有引发TextChanged事件的子控件(TextBoxes,ComboBoxes等)并将此处理程序附加到它们:

// psuedocode:
foreach( Control ctl in myForm.Controls )
{
    if( ctl is TextBox )
    {
        ((TextBox)ctl).TextChanged += UpdateIsDirtyHandler;
    }
    if( ctl is ComboBox )  { ... }
      // etc...
}
Run Code Online (Sandbox Code Playgroud)

如果你的表单有一组Model对象(一般来说这是一个很好的练习),你可以在那里处理"很脏"的跟踪逻辑.在您的模型中,脏跟踪并不总是合适的 - 这取决于您的"IsDirty"概念是否仅适用于用户界面或模型.