使用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?
答案 0 :(得分:7)
这取决于已完成的含义。
最常见的选择是在焦点离开控件时运行事件。这是Control.Leave事件或Control.LostFocus。这些也是用于验证的事件 - 当焦点发生变化时,会对新值(Validated
和Validating
事件)进行验证。
如果您尝试执行渐进式搜索等操作,您需要在控件仍处于焦点位置时进行响应但不响应每个键按下,则另一种解决方案是使用定时器组件,并在每次触发TextChanged
事件时重新启动计时器。这样,您的更新代码将仅在用户更改文本并且未输入任何其他内容(例如1秒)后运行。
答案 1 :(得分:0)
我不确定这是否是你所追求的,但DevExpress的编辑器控件提供了一个缓冲选项,在用户完成输入后(而不是每次击键后)触发更改事件...这基本上是什么Aaronaught建议使用Timer组件...
答案 2 :(得分:0)
您可以使用以下几种方法:Leave
事件或手动“输入已停止”事件。
Leave
事件通常是处理用户输入(例如用于验证)的好事件,因为它们会移动到表单的另一部分。只要确保事件从文本框转到表单上的任何其他UI元素时触发 - 您可能需要强制关注新元素。
TypingStopped
事件是你自己需要创建的事情,但它的基本思想是一个持续时间很短的计时器(比如500毫秒,但你需要测试它),你会在每个KeyDown事件上重启TextBox的。计时器将触发自己的事件并在其到达超时结束时自行禁用。
答案 3 :(得分:0)
答案是使用KeyPressUp事件。在文本框中添加或删除字符后触发此事件。因此,您可以检查文本框文本的长度,并根据文本长度设置启用或可见属性。