跟踪winform中的变化C#

时间:2010-01-18 17:32:15

标签: c# winforms

我有一个表格,主持一个tabcontrol。 这些选项卡中的每一个都有很多控件,包括文本框,组合框,树控件,旋转控件。

在表单顶部有一个文本框。

如果使用表单控件进行任何更改,则表示在选项卡1的组合框中更改了值,或者从树控件中删除了一个项目,我需要显示“*”表示某些值已更改。

我怎样才能以有效的方式实现这一目标? 或正在处理分配。控制更改事件是了解项目是否更改的唯一方法?

3 个答案:

答案 0 :(得分:4)

我认为Codeproject上的这篇文章可能会对您有所帮助,它有助于跟踪winforms控件中的更改。

希望这有帮助。

答案 1 :(得分:1)

这完全取决于软件的底层架构。如果它是以天真的方式编写的,那么是的,某种形式的蛮力只是你可以去的唯一方式(当然,这只会让代码变得更糟 - 这就是为什么好的架构很重要的原因)。

另一方面,如果软件设计得相当好,那么您将在用户界面后面跟踪跟踪UI状态的对象。这些对象可能会实现INotifyPropertyChanged之类的内容,您可以利用映射机制来更新UI以更改字段。

我怀疑你是在第一种情况下,你的问题的任何好的答案在你现在尝试做之前就已经消除了。我在你的声明中推断出这个形式是“托管一个tabcontrol”,并且“这些标签中的每一个都有[sic]大量的控制......”这是一个UI反模式,我一次又一次地从穷人那里看到设计师。

答案 2 :(得分:1)

您可以尝试这些方面的内容,您需要为表单上的每种控件添加一些内容。在你的from的load事件上执行addUpdateNotification(this);

    public void addUpdateNotification(Control start)
    {
        foreach (Control c in start.Controls)
        {
            if (c is TextBox)
            {
                var text = c as TextBox;
                text.TextChanged += notifyChanged;
            }

            addUpdateNotification(c);
        }
    }

    public void notifyChanged(Object sender, EventArgs args)
    {
        UpdateTextBox.Text = "*";
    }