【问题标题】:Keep focus on textbox after pressing enter按下回车后保持焦点在文本框上
【发布时间】:2011-10-04 20:47:59
【问题描述】:

如何在 VBA 表单中按 Enter 后将焦点保持在文本框中?

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

当我点击添加按钮时,它会将文本添加到列表框并将焦点返回到文本框,但是当我按下回车键时它不会,即使它使用相同的代码也是如此。有什么建议吗?

这是我的文本框代码:

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 中的下一个。

【问题讨论】:

    标签: vba textbox keydown enter


    【解决方案1】:

    我的想法是:尝试将 KeyCode 设置为 0。另外,使用 KeyCodeConstants 类(来自 Core 库)来确定 Enter 键的值。

    像这样:

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

    删除您尝试将焦点设置在另一个子 (TxtOtherAsset.SetFocus) 上的行。

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

    【讨论】:

    • 这就像一个魅力。做出这种改变非常容易。我没有测试另一个答案,因为这个看起来要简单得多。它奏效了。谢谢!
    • KeyCode = 0 - 这条线太棒了! 我在谷歌上搜索了 1-2 个小时,尝试了解决方案(即使是绝望的解决方案,.NET 或 VB6 相关),测试其他事件,因为我对KeyDown 失去了希望...在我找到这个金帖之前没有任何效果!
    【解决方案2】:

    您是否使用 Enter 键作为触发器来捕获对文本框的更改?如果是这种情况,请尝试更新后事件。另外,请查看 On Exit 事件。当我查看时,我注意到它有一个 Cancel 参数。如果您仍想在 Key Down 事件中捕获 Enter 键,则可以使用 On Exit 事件来防止离开文本框。当然,这可能意味着你被永久卡住了,可能需要设置一种允许退出的方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 2013-09-16
      • 1970-01-01
      • 2014-06-30
      • 2021-04-12
      • 2019-06-05
      • 1970-01-01
      相关资源
      最近更新 更多