我在文本框中有一篇长论文。我想复制长文中的一个词,只需将鼠标移到那个词上,然后等待 2 秒钟。我不想做任何事情,比如突出显示这个词。我可以知道如何让 VB 做到这一点吗?
谢谢
我在文本框中有一篇长论文。我想复制长文中的一个词,只需将鼠标移到那个词上,然后等待 2 秒钟。我不想做任何事情,比如突出显示这个词。我可以知道如何让 VB 做到这一点吗?
谢谢
我在网上找到了以下代码。(归功于 Siri1008)
Public Function GetWordUnderMouse(ByRef Rtf As System.Windows.Forms.RichTextBox, ByVal X As Integer, ByVal Y As Integer) As String
On Error Resume Next
Dim POINT As System.Drawing.Point = New System.Drawing.Point()
Dim Pos As Integer, i As Integer, lStart As Integer, lEnd As Integer
Dim lLen As Integer, sTxt As String, sChr As String
'
POINT.X = X
POINT.Y = Y
GetWordUnderMouse = vbNullString
'
With Rtf
lLen = Len(.Text)
sTxt = .Text
Pos = Rtf.GetCharIndexFromPosition(POINT)
If Pos > 0 Then
For i = Pos To 1 Step -1
sChr = Mid(sTxt, i, 1)
If sChr = " " Or sChr = Chr(13) Or i = 1 Then
'if the starting character is vbcrlf then
'we want to chop that off
If sChr = Chr(13) Then
lStart = (i + 2)
Else
lStart = i
End If
Exit For
End If
Next i
For i = Pos To lLen
If Mid(sTxt, i, 1) = " " Or Mid(sTxt, i, 1) = Chr(13) Or i = lLen Then
lEnd = i + 1
Exit For
End If
Next i
If lEnd >= lStart Then
GetWordUnderMouse = Trim(Mid(sTxt, lStart, lEnd - lStart))
End If
End If
End With
End Function
声明一个公共变量 curWord。
然后,在 RichTextBox 的 MouseMove 事件中,将 curWord = GetWordUnderMouse(Me.RichTextBox1, eX, eY)
在窗体上放置一个计时器并将其间隔设置为 2000。在计时器事件中,将 MsgBox(curWord) Me.Timer1.Enabled = False
在 RichTextBox MouseHover 事件中,启用计时器。
Voila, the word is chosen, without highlighting the textbox. Of course, you do not need the msgbox if you are just copying the word, but you should be able to sort that out.