使用默认按钮时,文本框lostfocus事件不会触发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用默认按钮时,文本框lostfocus事件不会触发相关的知识,希望对你有一定的参考价值。

今天我偶然发现一个LostFocus事件的问题来自没有开火的TextBox。大多数客户没有任何问题,但其中一小部分报告了意外行为。经过一些研究后,我发现没有问题的客户用鼠标点击“确定”按钮,而其他客户在键盘上按下Enter。 “确定”按钮是表单上的默认按钮,因此按下Enter应该可以正常工作。问题是按下Enter不会在焦点上触发TextBox上的LostFocus事件。

经过一些谷歌搜索后,很明显这是默认按钮的预期行为。焦点永远不会失去TextBoxCommandButton Click事件背后的代码正在运行而没有被点击。

如何在使用默认按钮时触发LostFocus事件?

答案

一个对我有用的简单黑客是每当Click事件被触发时将焦点设置为“Ok”按钮。这样,当前控件自动运行其LostFocus事件。设置焦点后,不要忘记添加额外的DoEvents。否则,在执行其他代码后,LostFocus事件将触发。

Private Sub cmdOk_Click()
    cmdOK.SetFocus
    DoEvents
    'Run your other code
End Sub

以上是关于使用默认按钮时,文本框lostfocus事件不会触发的主要内容,如果未能解决你的问题,请参考以下文章

VB 6文本框中的大写

需要将多个文本框的TextBox_LostFocus的重复代码缩减为一个函数

WPF UserControl检测LostFocus忽略儿童

Case3 模糊查询提示

Access 2007 - LostFocus 活动

如何在文本框中获取Enter键以触发函数而不是第一个/默认按钮