按下回车键后保持文本框的焦点

6

如何在VBA表单中按下回车后保持文本框的焦点?

以下代码将文本添加到列表框中,我想保持焦点在文本框上,以准备接收另一个项目。

当我点击添加按钮时,它会将文本添加到列表框并将焦点返回到文本框,但是当我按下回车键时,尽管使用相同的代码,它却没有这样做。有什么建议吗?

这是我的文本框代码:

Private Sub TxtOtherAsset_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    If KeyCode = 13 Then
        CmdAddOtherAsset_Click
    End If

End Sub

这是我按钮的代码:

Private Sub CmdAddOtherAsset_Click()

    If TxtOtherAsset.Text <> "" Then
        ListAddedAssets.AddItem TxtOtherAsset.Text
        TxtOtherAsset.Text = ""
    End If

    TxtOtherAsset.SetFocus

End Sub

我尝试了几种方法,但无法将焦点返回到文本框。按下回车键后,焦点会跳转到TabIndex中的下一个。

2个回答

7

从我个人的经验来看,尝试将 KeyCode 设置为 0。同时,使用 KeyCodeConstants 类(来自 Core 库)确定 Enter 键的值。

代码如下:

If KeyCode = KeyCodeConstants.vbKeyReturn Then
    CmdAddOtherAsset_Click
    KeyCode = 0
End If

移除你正在尝试设置焦点的另一个子元素上的代码行(TxtOtherAsset.SetFocus)。

希望这对你有用。我没有测试过它。


1
这个运行得非常好。改动起来非常容易。我没有测试另一个答案,因为这个看起来简单得多。而且它成功了。谢谢! - rubenploneda
KeyCode = 0 - 这行代码太棒了!我花了1-2个小时在谷歌上搜索,尝试各种解决方案(甚至是绝望的.NET或VB6相关的),测试其他事件,因为我已经对 KeyDown 失去了希望... 直到我找到了这篇黄金文章! - ZygD

1

你是使用回车键作为触发器来捕捉文本框的更改吗?如果是这样,请尝试使用“更新后”事件。此外,查看“退出”事件。当我查看时,我注意到它有一个取消参数。如果您仍然想在“按键按下”事件中捕获回车键,您可能可以使用“退出”事件来防止离开文本框。当然,这可能意味着您被永久困住了,可能需要设置一种允许退出的方式。


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