如何在文本框中选择文本?

Posted

技术标签:

【中文标题】如何在文本框中选择文本?【英文标题】: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 【参考方案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"

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

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

【讨论】:

以上是关于如何在文本框中选择文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有焦点的情况下突出显示/选择 wpf 文本框中的文本?

如何在获得焦点时选择文本框中的所有文本

如何从菜单栏中选择在文本框中显示特定文本

如何让word文本框中的文字垂直上下居中

如何选择文本框中的文本,插入符号位于选择的开头?

word文本框中如何调行间距