使用默认按钮时,文本框失去焦点事件不会触发
Textbox lostfocus event doesn't fire when using a default button
今天我偶然发现 TextBox
中的 LostFocus
事件没有触发。大多数客户没有任何问题,但其中一小部分报告了意外行为。经过一些研究,我发现没有遇到问题的客户用鼠标单击 "Ok" 按钮,而其他客户则按键盘上的 Enter
。 "Ok" 按钮是表单上的默认按钮,因此按 Enter
应该可以正常工作。问题是按下 Enter
不会在具有焦点的 TextBox 上触发 LostFocus
事件。
经过一些谷歌搜索后,很明显这是默认按钮的预期行为。焦点永远不会丢失 TextBox
并且 CommandButton
Click
事件背后的代码在 运行 没有被点击。
如何在使用默认按钮时触发 LostFocus
事件?
一个对我有用的简单 hack 是在触发 Click
事件时将焦点设置到 "Ok" 按钮。这样当前控件会自动运行其 LostFocus
事件。不要忘记在设置焦点后多加一个DoEvents
。否则 LostFocus
事件会在您的其他代码执行后触发。
Private Sub cmdOk_Click()
cmdOK.SetFocus
DoEvents
'Run your other code
End Sub
今天我偶然发现 TextBox
中的 LostFocus
事件没有触发。大多数客户没有任何问题,但其中一小部分报告了意外行为。经过一些研究,我发现没有遇到问题的客户用鼠标单击 "Ok" 按钮,而其他客户则按键盘上的 Enter
。 "Ok" 按钮是表单上的默认按钮,因此按 Enter
应该可以正常工作。问题是按下 Enter
不会在具有焦点的 TextBox 上触发 LostFocus
事件。
经过一些谷歌搜索后,很明显这是默认按钮的预期行为。焦点永远不会丢失 TextBox
并且 CommandButton
Click
事件背后的代码在 运行 没有被点击。
如何在使用默认按钮时触发 LostFocus
事件?
一个对我有用的简单 hack 是在触发 Click
事件时将焦点设置到 "Ok" 按钮。这样当前控件会自动运行其 LostFocus
事件。不要忘记在设置焦点后多加一个DoEvents
。否则 LostFocus
事件会在您的其他代码执行后触发。
Private Sub cmdOk_Click()
cmdOK.SetFocus
DoEvents
'Run your other code
End Sub