当Visible = False时,TextBox TextChanged事件不会触发?

时间:2010-06-22 08:21:56

标签: c# winforms data-binding textbox textchanged

我有一个绑定到数据源的文本框。文本框的TextChanged事件会更新另一个文本框。

问题是,我不希望显示第一个文本框,因此我将其Visible属性设置为false。

但是,现在TextChanged事件并未触发!

我可以通过在表单加载上设置Visible=TrueLeft=-100000来解决此问题,但我想要一个合适的解决方案。

有人可以提供解释吗?

4 个答案:

答案 0 :(得分:7)

在FormLoad事件中而不是在设计器中设置textbox.Visible = false。它与句柄创建有关。如果在构造期间文本框不可见,则不会创建句柄。如果文本框在构造后变为不可见,则将创建句柄并发生事件。

在MSDN上查看此discussion

答案 1 :(得分:3)

接受的答案的另一种解决方案是在Loaded上设置TextChanged监听器,这对我来说同样适用(至少在Silverlight中)并保持设计者视图应该是。

答案 2 :(得分:0)

它是什么类型的数据源?它可能有一个可以直接使用的事件,而不是使用文本框来监听更新。

答案 3 :(得分:-1)

如果Visible等于false,则不会呈现Control。因此它将无法发射事件。

相反,请将style设置为display:none。您可以使用Attributes集合以编程方式设置/取消设置:

MyTextBox.Attributes.Add("style", "display: none");