控制Windows Forms C#应用程序中的更改

3

我有一个表单,里面有几个组件,比如TextBoxComboBox,我需要知道当点击“退出”按钮时,表单是否发生了任何更改。有没有办法做到这一点?

4个回答

3
您可以创建一个通用的更改事件处理程序,该处理程序在更改时设置标志,并将所有控件的更改事件分配给它。
这可能很容易地通过在加载时循环遍历所有控件来完成。

1

您可以循环遍历所有控件,但这必须是递归的,因为一个控件可以包含其他控件,例如(为简洁起见没有空值检查):

private void IterateOverControls( Control parent )
{
    ProcessControl( parent );

    foreach( Control control in parent.Controls )
        IterateOverControls( control );
}

在ProcessControl中,您可以连接事件处理程序处理OnEnter(以存储状态)和OnLeave(以检查当前状态是否与存储的状态相同)。当处置时,您需要取消所有事件处理程序的连接。此外,用于存储检查状态的代码需要针对不同的控件类型进行更改,例如 TextBox将是Text属性,但单选按钮将是索引等。如果您可以比较窗体状态和底层数据存储状态,则显然这变得更简单,在这种情况下,您可以在每个OnLeave事件上仅进行比较。
另一个要考虑的问题是,您是否需要跟踪实际更改?例如,我有2个单选按钮:A和B。我勾选了B(进行了更改),因此输出按钮或其他按钮的Enabled属性发生了更改。然后,我点击A(即返回原始状态)。那么你是否需要在那时还原按钮?
这就是为什么您应该考虑采用模型视图控制器方法的原因 :)

0
最简单的方法是在表单上使用一个名为“IsChanged”的变量。当表单最初显示时,将其设置为false,并在进行任何更改时将其设置为true。
或者,您可以记录表单显示时的所有值,并在完成后检查当前值与旧值是否有所更改。

0

如果这个已经快完成了,而且你需要快速实现某些功能,那么最好假定有些东西已经发生了变化,并在更新逻辑中(无论正在做什么)不更新仍然相同的内容,这样可能更容易。

正如其他人提到的那样,有可能有人更改了某些内容,然后又将其更改回来。在这种情况下,你想做什么?没有额外的工作,你就无法维护表单的正确状态。这是一个需要你在开始之前计划的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接