什么是测试文本框文本是否已完成文本更改时使用的最佳方式/事件

时间:2010-03-15 03:49:56

标签: c# winforms textbox events

使用winforms,c#,vs 2008

所以我在winforms上有textbox1,textbox2和textbox3。

Textbox3.text = textbox1.text + textbox2.text。

每当textbox1和textbox2的内容已手动或以编程方式更改时,我都需要更新textbox3。

问题是,如果我使用textbox textchanged事件,它会在文本框中作为一种类型继续触发。我需要一种方法来调用我的方法来填充textbox3,在tb1或tb2完成程序化或通过键输入完成后,并且每次输入文本字母时都不会触发。

如果tb1或tb2 已完成更改,我怎样才能更新TextBox3?

4 个答案:

答案 0 :(得分:7)

这取决于已完成的含义。

最常见的选择是在焦点离开控件时运行事件。这是Control.Leave事件或Control.LostFocus。这些也是用于验证的事件 - 当焦点发生变化时,会对新值(ValidatedValidating事件)进行验证。

如果您尝试执行渐进式搜索等操作,您需要在控件仍处于焦点位置时进行响应但不响应每个键按下,则另一种解决方案是使用定时器组件,并在每次触发TextChanged事件时重新启动计时器。这样,您的更新代码将仅在用户更改文本并且未输入任何其他内容(例如1秒)后运行。

答案 1 :(得分:0)

我不确定这是否是你所追求的,但DevExpress的编辑器控件提供了一个缓冲选项,在用户完成输入后(而不是每次击键后)触发更改事件...这基本上是什么Aaronaught建议使用Timer组件...

http://documentation.devexpress.com/#WindowsForms/DevExpressXtraEditorsRepositoryRepositoryItem_EditValueChangedFiringModetopic

答案 2 :(得分:0)

您可以使用以下几种方法:Leave事件或手动“输入已停止”事件。

Leave事件通常是处理用户输入(例如用于验证)的好事件,因为它们会移动到表单的另一部分。只要确保事件从文本框转到表单上的任何其他UI元素时触发 - 您可能需要强制关注新元素。

TypingStopped事件是你自己需要创建的事情,但它的基本思想是一个持续时间很短的计时器(比如500毫秒,但你需要测试它),你会在每个KeyDown事件上重启TextBox的。计时器将触发自己的事件并在其到达超时结束时自行禁用。

答案 3 :(得分:0)

答案是使用KeyPressUp事件。在文本框中添加或删除字符后触发此事件。因此,您可以检查文本框文本的长度,并根据文本长度设置启用或可见属性。