如何在文本框中选择文本?
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.CancelEvent
或Cancel = 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"
我知道这很粗糙,但是当您想将文本框用作整个房间的条形码扫描仪条目时。
为我工作,但它是一个非常简单的用户表单。
【讨论】:
以上是关于如何在文本框中选择文本?的主要内容,如果未能解决你的问题,请参考以下文章