1

テキストボックスに長いエッセイがあります。マウスをその単語に移動して 2 秒間待つだけで、長文の単語をコピーしたいと考えています。単語を強調表示するようなことはしたくありません。VB でそれを行う方法を教えてください。

ありがとう

4

1 に答える 1

2

次のコードをオンラインで見つけました。(クレジットは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 イベントで、タイマーを有効にします。

ほら、テキストボックスを強調表示せずに、単語が選択されます。もちろん、単語をコピーするだけなら msgbox は必要ありませんが、それを整理できるはずです。

于 2012-07-09T12:04:32.430 に答える