Мне нужно показать пользователю, как и в файле notepad.exe, начало выбора и длину его текста на курсоре.RichTextbox SelectionStart возвращает неверный индекс
Длина выбора не представляет проблемы, так как Richtextbox поддерживает свойство выбора с помощью начала и конца.
Но StartIndex моего RichTexbox всегда 2
вместо 0
если установить курсор на первую позицию документа. Если я прочитаю полный текст, он находится на 0
. Но если я нажму SPACE
, а затем BACKSPACE
, то текстовое поле пуст, но счетчик StartIndex находится на 2
Любая идея?
* EDIT * ПЕРВОЕ РЕШЕНИЕ
Хорошо, вот рабочий раствор шахты. Но я думаю, что есть лучший способ сделать это.
''' <summary>
''' Get the position of the cursor. Ignores all formatting characters like ENTER and PARAGRAPH. Just counts the visible characters.
''' </summary>
''' <param name="rtb">The richtextbox the value should be determined</param>
''' <returns>Index value of the cursor. 0 is at the first position. After position is behind characters "123" it would return the index 3.</returns>
''' <remarks>Watch out for performance, Use this methode in separated. Timo Böhme, 2012</remarks>
Private Function GetPositionOfCursor(ByVal rtb As RichTextBox) As Integer
Dim contentStart As TextPointer = rtb.Document.ContentStart
Dim res As Integer = 0
Dim CursorIndex As Integer = contentStart.GetOffsetToPosition(rtb.CaretPosition)
Dim j As Integer = 0
Do
If j > CursorIndex Then Exit Do
If contentStart.GetPositionAtOffset(1, LogicalDirection.Forward) Is Nothing Then
Exit Do
ElseIf contentStart.GetPointerContext(LogicalDirection.Backward) = TextPointerContext.Text Then
res += 1
End If
contentStart = contentStart.GetPositionAtOffset(1, LogicalDirection.Forward)
j += 1
Loop
Return res
End Function
RichTextBox автоматически создает абзац и прогон (или что-то подобное), следовательно, ненулевой индекс. Курсор не в начале, а в первом прогоне в первом абзаце. –
Еще раз спасибо H.B. за ваш очень быстрый ответ. У вас есть решение? – Nasenbaer
Нет, иначе я бы отправил ответ. –