Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Как в RichTextBox выделить строку по индексу символа?


Автор: Exception 29.12.2004, 11:39
Если требуется выделить строку в которой находится символ с известным индексом (например, строку, в которой находится курсор), можно воспользоваться вот этим кодом. 

Процедура запомнит в n номер строки в которой находится символ с индексом CharIndex. Затем в первом цикле, перебирая символы от CharIndex в сторону начала, запомнит в p1 индекс первого символа строки с номером n, а во втором цикле, перебирая символы от CharIndex в сторону конца текста, запомнит в p2 индекс последнего символа. На случай если в теле одного или обоих циклов не выполнится условие, перед циклами выполняется инициализация переменных p1 = 0 и p2 = ln(ln - длина текста). Впрочем p1 и так равна нулю, но для наглядности я все же написал инициализацию для нее. И еще можно обойтись без переменной i, указав вместо нее в первом цикле p1, а во втором - p2, но опять таки для большей наглядности не стал этого делать.


Код

Sub SelectLineByCharIndex(ByVal rtfSrc As RichTextBox, ByVal CharIndex As Integer)
   Dim i, n, p1, p2 As Integer
   Dim ln As Integer = rtfSrc.TextLength

   p1 = 0 : p2 = ln
   n=rtfSrc.GetLineFromCharIndex(CharIndex)
   For i = CharIndex To 0 Step -1
       If rtfSrc.GetLineFromCharIndex(i) < n Then
           p1 = i + 1
           Exit For
       End If
   Next
   For i = CharIndex To ln
       If rtfSrc.GetLineFromCharIndex(i) > n Then
           p2 = i
           Exit For
       End If
   Next

   rtfSrc.Select(p1, p2 - p1)
   rtfSrc.Focus()
End Sub


Вызвать например так: 
SelectLineByCharIndex(rtf, rtf.SelectionStart)
Выделит строку в которой находится курсор, где rtf - ваш RichTextBox

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)