【问题标题】:How to select a word in a RichTextBox with a mouseover event如何使用鼠标悬停事件在 RichTextBox 中选择一个单词
【发布时间】:2012-07-08 12:42:53
【问题描述】:

我在文本框中有一篇长论文。我想复制长文中的一个单词,只需将鼠标移到该单词上并等待 2 秒钟。我不想做任何事情,比如突出显示这个词。我可以知道如何让 VB 做到这一点吗?

谢谢

【问题讨论】:

  • winforms、wpf 或 vba。和文本框或richtextbox?
  • 窗体和富文本框。感谢您的提问,对于我的问题中的信息不足,我深表歉意。

标签: vb.net winforms text richtextbox


【解决方案1】:

我在网上找到了以下代码。 (归功于 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, e.X, e.Y)

在窗体上放置一个计时器并将其间隔设置为 2000。在计时器事件中,放置 消息框(curWord) Me.Timer1.Enabled = False

在 RichTextBox MouseHover 事件中,启用计时器。

瞧,这个词被选中了,没有突出显示文本框。当然,如果您只是复制单词,则不需要 msgbox,但您应该能够对其进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2023-02-10
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    • 2016-02-20
    相关资源
    最近更新 更多