Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
-85 / 39 / 6
Регистрация: 07.08.2013
Сообщений: 968
Записей в блоге: 1
1
.NET 4.x

Получить слово под курсором мыши в RichTextBox

23.09.2016, 11:07. Показов 1148. Ответов 1
Метки нет (Все метки)

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

Пытаюсь получить слово под курсором мыши.

Если курсор установить на слово в середине текста, то тут небольшие проблемы -
через InStr и InStrRev я их решаю.

Но если поставить курсор на слово в начале текста, в начале предложения, в конце текста, в конце предложения или на отдельном слове, то тут начинаются проблемы.

Вот код:

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 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
Помогите, знатоки!

Спасибо за понимание.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.09.2016, 11:07
Ответы с готовыми решениями:

Как получить текст под курсором мыши.
Доброго времени суток. В общем, задача: получить текст под курсором мыши. Среда разработки:...

Захват текста под курсором мыши
Здравствуйте. Возникла такая проблема: надо в текстовом редакторе (например TMemo) получить слово...

Найти ВСЕ объекты под курсором мыши
Добрый день. Есть Canvas, на нем расположены картинки (Image). Они могут накладываться друг на...

Распознавание цвета пикселя под курсором мыши
Есть программа, простая игра, в которой на поле Image1 при нажатий левой кнопкой ведешь красную...

1
1581 / 656 / 223
Регистрация: 09.06.2011
Сообщений: 1,328
23.09.2016, 14:02 2
Лучший ответ Сообщение было отмечено Anderis49 как решение

Решение

Как вариант
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    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
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2016, 14:02

Как можно получить N символов идущих перед курсором в RichTextBox
Всем привет. Возник вопрос. Есть окно wpf и элемент richtextbox в нем. Как можно получить N...

Не могу прочитать строку под курсором мыши в документе Word
Мне нужно получить строку Wordа при клике на ней мышью при нажатой клавише CTRL. Я создала ловушку...

Как определить какой объект находится под курсором мыши?
У меня такая проблемка: в событии MouseUp необходимо получить ссылку на объект, который в данный...

При нажатии кнопки мыши изменить цвет строки под курсором
Ассемблер. При нажатии кнопки мыши изменить цвет строки под курсором. Если лень писать код,...

TChart. Как взять значение точки на оси Х под курсором мыши
Здравствуйте. Не могу узнать значение при наведении курсора на BottomAxis, где расположены...

Получить имя объекта под курсором
Ребята как получить имя контрола на который направлена мышка или нажат пальцем?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru