C#:Control的TextChanged事件未在“assign”上触发

时间:2009-07-29 07:35:36

标签: c#

好的,这是合约。

我有一个图表,它“监听”某些标签的文本字段,并绘制其值。它通过在TextChanged事件上添加值来实现此目的。

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

我需要什么: 检测标签的Text字段是否已更新(分配给)的方法,以及我必须使用的所有内容都是对Control的引用(即Label)。

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

3 个答案:

答案 0 :(得分:2)

在初始分配文本时未调用TextChanged事件处理程序的原因是在分配了第一个文本后附加了它(设计器似乎默认按此顺序执行操作)。我会这样做:

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

这将确保使用初始值更新图表。 调用InitializeComponent之后发生此呼叫非常重要。

答案 1 :(得分:1)

“setters”中的常见做法是忽略琐碎的变化,例如:

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

如果Text的行为与此类似,并且您依赖所有更新导致事件,那么它可能无法正常工作。我可能会试着找到另一种方法来做你想做的事情;也许使用一个传递值的中间对象。

答案 2 :(得分:0)

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