C#:TextChanged控件未启动事件;分配;

C#:TextChanged控件未启动事件;分配;,c#,C#,好吧,就这么定了 我有一个图表,它“侦听”一些标签的文本字段,并将它们的值绘制成图表。它通过在TextChanged事件上添加值来实现这一点 问题是: TextChanged仅在文本实际发生更改(显然)时触发,而不是在为其指定新值时触发 我需要的是: 一种检测标签的文本字段是否已更新(分配给)的方法,我需要处理的只是对控件(即标签)的引用 我意识到TextChanged并不是为此而设计的,这就是为什么我想知道你们中是否有人遇到过类似的问题,并找到了解决方案。在“设置者”中,忽略细微的更改是相当常

好吧,就这么定了

我有一个图表,它“侦听”一些标签的文本字段,并将它们的值绘制成图表。它通过在TextChanged事件上添加值来实现这一点

问题是: TextChanged仅在文本实际发生更改(显然)时触发,而不是在为其指定新值时触发

我需要的是: 一种检测标签的文本字段是否已更新(分配给)的方法,我需要处理的只是对控件(即标签)的引用


我意识到TextChanged并不是为此而设计的,这就是为什么我想知道你们中是否有人遇到过类似的问题,并找到了解决方案。

在“设置者”中,忽略细微的更改是相当常见的做法,例如:

public int Foo {
    get {return foo;}
    set {
        if(foo != value) {
            foo = value;
            OnFooChanged();
        }
    }
}

如果
Text
的行为是这样的,并且您依赖于导致事件的所有更新,那么它可能无法按您所希望的方式工作。我可能会尝试另一种方法来做你想做的事;可能使用传递值的中间对象。

您可以创建自己的控件,该控件继承自该控件,并创建自己的文本属性,该属性将在分配新值时触发事件。

在文本的初始分配中未调用
TextChanged
事件处理程序的原因是它是在第一个文本被指定后附加的(默认情况下,设计者似乎是按照这个顺序进行操作的)。我想这样做:

  • TextChanged
    调用另一个方法(
    UpdateGraph
  • UpdateGraph
    收集必要的数据并更新图表
  • 调用
    UpdateGraph
    作为加载表单时的最后一件事

这将确保使用初始值更新图形。重要的是,此调用在调用
InitializeComponent

之后进行,如果您的意思是
覆盖
,则可以;但是如果“创建你自己的”意味着
新文本{…}
,那就太糟糕了……对我来说,现在还太早;),但是,是的,超越