Автор:
Алексей Немиро | добавлено: 18.03.2011, 18:06 | просмотров: 2999 (2+) | комментариев:
0 | рейтинг:
x0
Пример показывает, как выбрать слово в (Rich)TextBox в зависимости от расположения каретки. Поиск границ слов осуществляется с помощью регулярных выражений.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim myRich As New RichTextBox()
myRich.Text = "Это текст по которому можно ткнуть левой кнопкой мышки, " & vbCrLf & _
"и выбранное слово появится в заголовке формы." & vbCrLf & _
"Не стесняйтесь, попробуйте ;-)"
myRich.Dock = DockStyle.Fill
'обработчики событий
AddHandler myRich.MouseDown, AddressOf myRich_MouseClick
Me.Controls.Add(myRich)
End Sub
Private Sub myRich_MouseClick(sender As Object, e As System.Windows.Forms.MouseEventArgs)
Dim myRich As RichTextBox = CType(sender, RichTextBox)
'переменные для хранения координат слова в RichTextBox
Dim iStart As Integer = 0, iEnd As Integer = 0
'поиск границ слова делается при помощи регулярных выражений
Dim myReg As System.Text.RegularExpressions.Regex
'шаблон регулярного выражения
Dim pattern As String = "[\.\,\!\?\x22\'\(\)\[\]\;\:\s\n]"
If myRich.SelectionStart = 0 Then
'курсор в начале строки
iStart = 0
Else
'ищем начало слова
'поиск начинаем с позиции курсора справа налево
myReg = New System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.RightToLeft)
iStart = myReg.Match(myRich.Text, myRich.SelectionStart).Index
End If
'ищем конец слова
'поиск делаем слева направо относительно позиции курсора
myReg = New System.Text.RegularExpressions.Regex(pattern)
iEnd = myReg.Match(myRich.Text, myRich.SelectionStart).Index
If iEnd <= 0 Then iEnd = myRich.Text.Length
'выводим выбранное слово в заголовок формы
Me.Text = myRich.Text.Substring(iStart, iEnd - iStart)
End Sub