.NET 4.x Получить слово под курсором мыши в RichTextBox - Visual Basic .NET
Формулировка задачи:
Всем знатокам доброго времени суток!
Пытаюсь получить слово под курсором мыши. Если курсор установить на слово в середине текста, то тут небольшие проблемы - через InStr и InStrRev я их решаю. Но если поставить курсор на слово в начале текста, в начале предложения, в конце текста, в конце предложения или на отдельном слове, то тут начинаются проблемы. Вот код:
Листинг программы
- Private Sub RichTextBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RichTextBox1.MouseUp
- ' RichTextBox1.Text = " " & InputBox("", "Поиск слова по маске", "") & " "
- RichTextBox1.SelectionStart = 0
- RichTextBox1.SelectionLength = RichTextBox1.TextLength
- RichTextBox1.SelectionBackColor = Color.White
- RichTextBox1.SelectionColor = Color.Black
- RichTextBox1.SelectionFont = New Font("Verdana", 10, FontStyle.Regular)
- If e.Clicks = 1 And e.Button = MouseButtons.Left Then
- positionToSearch = RichTextBox1.GetCharIndexFromPosition(New Point(e.X, e.Y))
- sft = RichTextBox1.TextLength
- If positionToSearch = 0 Then
- fsp = 1
- olp = InStr(1, RichTextBox1.Text, " ", vbTextCompare)
- Else
- If InStr(positionToSearch, RichTextBox1.Text, " ", vbTextCompare) = 0 Then
- olp = InStr(positionToSearch, RichTextBox1.Text, vbCrLf, vbTextCompare)
- If olp = 0 Then olp = sft
- Else
- olp = InStr(positionToSearch, RichTextBox1.Text, " ", vbTextCompare)
- End If
- If InStrRev(RichTextBox1.Text, " ", positionToSearch, vbTextCompare) = 0 Then
- fsp = InStrRev(RichTextBox1.Text, vbCrLf, positionToSearch, vbTextCompare)
- If fsp = 0 Then fsp = 1
- Else
- fsp = InStrRev(RichTextBox1.Text, " ", positionToSearch, vbTextCompare) + 1
- End If
- End If
- If olp > 0 And fsp > 0 Then
- twt = Mid(RichTextBox1.Text, fsp, olp - fsp)
- Dim Word As String = twt
- Dim allIp As MatchCollection = Regex.Matches(RichTextBox1.Text, Word)
- For Each ip As Match In allIp
- RichTextBox1.SelectionStart = ip.Index
- RichTextBox1.SelectionLength = ip.Length
- RichTextBox1.SelectionBackColor = Color.LightGray
- RichTextBox1.SelectionColor = Color.Red
- RichTextBox1.SelectionFont = New Font("Verdana", 12, FontStyle.Bold)
- Next
- End If
- End If
- End Sub
Решение задачи: «.NET 4.x Получить слово под курсором мыши в RichTextBox»
textual
Листинг программы
- Private Sub RichTextBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RichTextBox1.MouseUp
- Dim startPosition, endPosition As Integer, t As String
- Dim separators() As Char = {" "c, "."c, ","c, "?"c, "!"c, vbCr, vbTab, vbLf} ' символы разделители
- endPosition = RichTextBox1.GetCharIndexFromPosition(e.Location)
- RichTextBox1.SelectionStart = 0
- RichTextBox1.SelectionLength = RichTextBox1.TextLength
- RichTextBox1.SelectionBackColor = Color.White
- RichTextBox1.SelectionColor = Color.Black
- RichTextBox1.SelectionFont = New Font("Verdana", 10, FontStyle.Regular)
- If e.Clicks = 1 And e.Button = MouseButtons.Left Then
- t = RichTextBox1.Text
- For startPosition = endPosition - 1 To 0 Step -1
- If separators.Contains(t(startPosition)) Then
- Exit For
- End If
- Next
- startPosition += 1
- For endPosition = endPosition To t.Length - 1
- If separators.Contains(t(endPosition)) Then
- Exit For
- End If
- Next
- RichTextBox1.SelectionStart = startPosition
- RichTextBox1.SelectionLength = endPosition - startPosition
- If RichTextBox1.SelectionLength Then
- RichTextBox1.SelectionBackColor = Color.LightGray
- RichTextBox1.SelectionColor = Color.Red
- RichTextBox1.SelectionFont = New Font("Verdana", 12, FontStyle.Bold)
- End If
- End If
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д