TextUpdate和TextChanged事件有什么区别?

17

对于每个控件,都有很多事件。其中两个非常相似,即“文本更新”和“文本更改”。它们之间有什么区别呢?


1
这里的上下文是什么?是哪种控件?Winform?WPF?MVC...? - Ron Sijm
2个回答

16

以下是我对此事的看法,引用了MSDN的来源。我在示例中使用了TextBox和ComboBox,但我相当确定逻辑是普遍适用的。

TextUpdate事件:

在控件格式化文本但在文本显示之前发生。使用TextUpdate事件,在文本实际显示之前验证文本。

例如,如果ComboBox正在从某个数据源填充,且数据发生更改,则可以触发TextUpdate事件以进行验证(或其他任何操作)。

http://msdn.microsoft.com/en-us/library/system.windows.forms.combobox.textupdate(v=vs.110).aspx

TextChanged事件:

在文本框中的内容更改时发生。用户输入或将Text属性设置为新值会引发TextChanged事件。

我认为该引述涵盖了示例用法。

http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.textchanged(v=vs.95).aspx


第一个链接的备注页面指出:“如果通过编程方式更改文本属性,则不会触发TextUpdate事件”,这使得它非常方便,例如,您只想捕获ComboBox文本框部分中的输入(如下面@damichab的答案所述)。 - rkagerer

2

我刚刚在使用comboBox时进行了一些尝试...

我发现,当文本发生变化时,例如用户输入或SelectedIndex更改时,TextChanged事件会触发。

只有当用户更新文本时,TextUpdated事件才会触发。

我的程序中,我使用Items.Add("x")来填充并使用SelectedIndex选择行。当用户选择不同的项目时,TextUpdated不会被触发。在TextUpdated中,我编写了代码以保存用户正在输入/更改的更新文本。但是,您需要从SelectionChangedCommitted获取SelectedIndex并将其保存到变量中,因为TextUpdated中的SelectedIndex似乎仅返回-1。


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