【问题标题】:How to select text in a textbox?如何在文本框中选择文本?
【发布时间】:2017-11-15 16:20:37
【问题描述】:

我有一个带有文本框的用户表单。我想在 keyDown 事件之后选择(突出显示)内的文本。

最终用户可以输入的内容有一些限制。如果输入错误,会弹出一条消息,并选择文本框中邀请用户输入内容的文本。

我使用以下代码:

Me.txtbox_add_folder.SetFocus
Me.txtbox_add_folder.SelStart = 0
Me.txtbox_add_folder.SelLength = Len(Me.txtbox_add_folder.Text)

setFocus 不起作用。好像是因为setFocus触发了一系列其他事件see this discussion

另一个讨论中提出的解决方案是包含DoCmd.CancelEventCancel = True,这样焦点就不会转到另一个控件,但这些命令在 Excel 上不起作用。

【问题讨论】:

  • 请提供足够的代码,以便我们可以尝试复制您的问题。 (我注意到在对答案的评论中您提到了 keyDown 事件,但您的问题中没有提到这一点。那么这段代码是在 txtbox_add_folder_KeyDown 事件中吗?还是在 txtbox_add_folder_Change 事件中?还是在txtbox_add_folder_Exit 事件?还是在哪里?)
  • TBH 听起来您只想在Enter 事件中使用您的代码。这似乎可以满足您的“我有一个带有文本框的 excel 用户表单,我想选择(突出显示)中的文本,以便最终用户可以看到要填充的内容。”要求。 (当然,您不需要 SetFocus 语句。)
  • 我添加了一些细节。事实上这段代码在keyDown事件中,并且在这个事件结束时焦点总是丢失并转移到另一个控件。
  • 如果您真的不希望用户能够退出文本框,只需在 Exit 事件中添加 Cancel = True
  • 实际激活 SetFocus 的进一步解决方案可能包括 1. 切换和重新切换 .Enabled 属性,或者 2. 通过任何其他接受焦点的控件(包括命令按钮或框架)显式失去焦点并最终重置再次聚焦。见Unexpected behaviour after using SetFocus on a text box

标签: excel vba userform setfocus


【解决方案1】:
 Application.enableevents = false
 Me.txtbox_add_folder.SetFocus
 Me.txtbox_add_folder.SelStart = 0
 Me.txtbox_add_folder.SelLength = Len(Me.txtbox_add_folder.Text)
 Application.enableevents = true

【讨论】:

  • 好吧,我尝试了您的解决方案,但焦点再次丢失并转移到另一个控件。看来keyDown事件最终会将焦点转移到另一个控件
【解决方案2】:

这种技术有点老套,但它以前对我有用。它将光标放在文本框中并执行 Ctrl+A 命令(全选),这将突出显示该文本框中的文本。

Me.txtbox_add_folder.SetFocus
SendKeys "^A"

【讨论】:

    【解决方案3】:

    我终于找到了解决办法。实际上焦点是在事件发生后自动失去的,为了避免这种情况,应该关闭属性中的TabStop参数。

    【讨论】:

      【解决方案4】:

      我的解决方案是在 所有 具有 Tab Stop 的项目上打开 Tab Stop,但相关文本框除外

      然后,在应用程序执行我要求它对文本框条目执行的任何操作后,使用 Application.SendKeys "{TAB"}

      我知道这很粗糙,但是当您想将文本框用作整个房间的条形码扫描仪条目时。

      为我工作,但它是一个非常简单的用户表单。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-05
        • 1970-01-01
        • 2011-02-18
        • 2014-03-03
        • 2011-01-28
        • 1970-01-01
        • 2012-02-22
        • 1970-01-01
        相关资源
        最近更新 更多