.NET 4.x Получить слово под курсором мыши в RichTextBox - Visual Basic .NET

Узнай цену своей работы

Формулировка задачи:

Всем знатокам доброго времени суток!

Пытаюсь получить слово под курсором мыши. Если курсор установить на слово в середине текста, то тут небольшие проблемы - через InStr и InStrRev я их решаю. Но если поставить курсор на слово в начале текста, в начале предложения, в конце текста, в конце предложения или на отдельном слове, то тут начинаются проблемы. Вот код:
Листинг программы
  1. Private Sub RichTextBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RichTextBox1.MouseUp
  2. ' RichTextBox1.Text = " " & InputBox("", "Поиск слова по маске", "") & " "
  3. RichTextBox1.SelectionStart = 0
  4. RichTextBox1.SelectionLength = RichTextBox1.TextLength
  5. RichTextBox1.SelectionBackColor = Color.White
  6. RichTextBox1.SelectionColor = Color.Black
  7. RichTextBox1.SelectionFont = New Font("Verdana", 10, FontStyle.Regular)
  8. If e.Clicks = 1 And e.Button = MouseButtons.Left Then
  9. positionToSearch = RichTextBox1.GetCharIndexFromPosition(New Point(e.X, e.Y))
  10. sft = RichTextBox1.TextLength
  11. If positionToSearch = 0 Then
  12. fsp = 1
  13. olp = InStr(1, RichTextBox1.Text, " ", vbTextCompare)
  14. Else
  15. If InStr(positionToSearch, RichTextBox1.Text, " ", vbTextCompare) = 0 Then
  16. olp = InStr(positionToSearch, RichTextBox1.Text, vbCrLf, vbTextCompare)
  17. If olp = 0 Then olp = sft
  18. Else
  19. olp = InStr(positionToSearch, RichTextBox1.Text, " ", vbTextCompare)
  20. End If
  21. If InStrRev(RichTextBox1.Text, " ", positionToSearch, vbTextCompare) = 0 Then
  22. fsp = InStrRev(RichTextBox1.Text, vbCrLf, positionToSearch, vbTextCompare)
  23. If fsp = 0 Then fsp = 1
  24. Else
  25. fsp = InStrRev(RichTextBox1.Text, " ", positionToSearch, vbTextCompare) + 1
  26. End If
  27. End If
  28. If olp > 0 And fsp > 0 Then
  29. twt = Mid(RichTextBox1.Text, fsp, olp - fsp)
  30. Dim Word As String = twt
  31. Dim allIp As MatchCollection = Regex.Matches(RichTextBox1.Text, Word)
  32. For Each ip As Match In allIp
  33. RichTextBox1.SelectionStart = ip.Index
  34. RichTextBox1.SelectionLength = ip.Length
  35. RichTextBox1.SelectionBackColor = Color.LightGray
  36. RichTextBox1.SelectionColor = Color.Red
  37. RichTextBox1.SelectionFont = New Font("Verdana", 12, FontStyle.Bold)
  38. Next
  39. End If
  40. End If
  41. End Sub
Помогите, знатоки! Спасибо за понимание.

Решение задачи: «.NET 4.x Получить слово под курсором мыши в RichTextBox»

textual
Листинг программы
  1.     Private Sub RichTextBox1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles RichTextBox1.MouseUp
  2.         Dim startPosition, endPosition As Integer, t As String
  3.         Dim separators() As Char = {" "c, "."c, ","c, "?"c, "!"c, vbCr, vbTab, vbLf} ' символы разделители
  4.  
  5.         endPosition = RichTextBox1.GetCharIndexFromPosition(e.Location)
  6.  
  7.         RichTextBox1.SelectionStart = 0
  8.         RichTextBox1.SelectionLength = RichTextBox1.TextLength
  9.         RichTextBox1.SelectionBackColor = Color.White
  10.         RichTextBox1.SelectionColor = Color.Black
  11.         RichTextBox1.SelectionFont = New Font("Verdana", 10, FontStyle.Regular)
  12.  
  13.         If e.Clicks = 1 And e.Button = MouseButtons.Left Then
  14.             t = RichTextBox1.Text
  15.             For startPosition = endPosition - 1 To 0 Step -1
  16.                 If separators.Contains(t(startPosition)) Then
  17.                     Exit For
  18.                 End If
  19.             Next
  20.             startPosition += 1
  21.             For endPosition = endPosition To t.Length - 1
  22.                 If separators.Contains(t(endPosition)) Then
  23.                     Exit For
  24.                 End If
  25.             Next
  26.  
  27.             RichTextBox1.SelectionStart = startPosition
  28.             RichTextBox1.SelectionLength = endPosition - startPosition
  29.             If RichTextBox1.SelectionLength Then
  30.                 RichTextBox1.SelectionBackColor = Color.LightGray
  31.                 RichTextBox1.SelectionColor = Color.Red
  32.                 RichTextBox1.SelectionFont = New Font("Verdana", 12, FontStyle.Bold)
  33.             End If
  34.         End If
  35.     End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут