问题描述
我有一个简单的用户窗体,其中只有TextBox1
和TextBox2
.我在两者中都输入了一些文字.假设焦点位于TextBox2
上(光标位于其中).当我单击TextBox1
时,我希望突出显示(选中)此控件中的整个文本.因此,我使用以下代码:
I have this simple Userform, where I only have TextBox1
and TextBox2
. I enter some text in both of them. Assume the focus is on (the cursor is in) the TextBox2
. When I click on TextBox1
, I want the whole text in this control to be highlighted (selected). Thus I use this code:
Private Sub TextBox1_Enter()
With TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
MsgBox "enter event was fired"
End Sub
在末尾有一个MsgBox
,这意味着该事件有效.但是,该文本未突出显示.该如何解决?
There is a MsgBox
at the end which is loaded, that means the event works. However, the text is not highlighted. How to fix this?
我使用Enter
事件,并且不想使用MouseDown
事件,因为我需要代码以编程方式激活TextBox1
时也能工作,所以我觉得Enter
事件是最好的选择,因为这两种情况都会被触发! MouseDown
事件的另一个缺点是:当我第二次单击TextBox1
时,我不希望整个文本都被突出显示,因为焦点设置在第一次单击上,并且在单击后未更改我第二次单击相同的控件;因此在这种情况下,我希望光标能够正常运行(不要保留文本标记).
I use the Enter
event and don't want to use the MouseDown
event, because I need the code to also work when the TextBox1
is activated programatically, so I feel the Enter
event to be the best choice, as it's fired in both cases! Another drawback of the MouseDown
event is: when I click for the second time on the TextBox1
, I would not expect the whole text to be highlighted anymore, because the focus was set on the first click and it was not changed after I clicked on the same control for the second time; so in this case I would like the cursor to act normally (not to keep the text marked).
更新
当我单击TextBox1
一次时,我希望得到以下结果:
如果再次单击,突出显示将被删除,光标将被放置在被单击的位置.
Update
When I click once on the TextBox1
, I expect to have this result:
If clicked again, the highlight would be removed and the cursor would be placed in the place where it was clicked.
推荐答案
没有比这更简单的了...
Can't be more simple than this I guess...
Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single)
With TextBox1
.SelStart = 0
.SelLength = Len(.Text)
End With
End Sub
无论您单击文本框还是将其标签到其中,它都会做您想要的.要取消选择文本,请使用箭头键.
Whether you click on the textbox or you tab into it, it will do what you want. To deselect the text, use the arrow keys.
说明
如果调试代码,即使您说过.SetFocus
,您仍会看到焦点不在文本框上. .SetFocus
在TextBox1_Enter()
中不起作用,您需要集中精力处理其余代码.因此,我的选择...
If you debug the code you will see that even though you have said .SetFocus
, the focus is not on the Textbox. .SetFocus
doesn't work in TextBox1_Enter()
and you need to have focus for the rest of the code to work. And hence my alternative...
替代
您可能也喜欢此版本:)这克服了在文本框中使用鼠标的局限性
You may also like this version :) This overcomes the limitation of using the mouse in the TextBox
Dim boolEnter As Boolean
Private Sub TextBox1_Enter()
boolEnter = True
End Sub
Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single)
If boolEnter = True Then
With TextBox1
.SelStart = 0
.SelLength = Len(.Text)
End With
boolEnter = False
End If
End Sub
这篇关于文本框激活后如何选择内容?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!