При нажатии на текстовое содержимое элемента управления RichTextBox
позиция каретки перемещается в положение указателя мыши внутри элемента управления. Эта позиция теперь является текущей точкой вставки.
Новая позиция каретки может быть восстановлена двумя способами:
Проверка свойства SelectionStart :
int CaretPosition = richTextBox1.SelectionStart;
Использование позиции указателя мыши, возвращаемой MouseEventArgs
e.Location
.
В этом случае вы можете использовать метод GetCharIndexFromPosition :
int CaretPosition = richTextBox1.GetCharIndexFromPosition(e.Location);
Если вы сравните значения, возвращаемые SelectionStart
и GetCharIndexFromPosition
, вы можете проверить, что эти значения равны.
Если вы хотите, чтобы каретка следовала за указателем мыши, когда она движется внутри границ RichTextBox
, вы можете подписаться на событие MouseMove
и использовать этот метод для перевода позиции указателя мыши в позицию индекса символа. (сначала нужно щелкнуть внутри элемента управления RichTextBox
):
private void richTextBox1_MouseMove(object sender, MouseEventArgs e)
{
RichTextBox rtb = sender as RichTextBox;
rtb.SelectionStart = rtb.GetCharIndexFromPosition(e.Location);
}
Положение строки возвращается методом GetLineFromCharIndex :
(Массив Lines [] относится к текстовым частям, разделенным переводом строки (\n
) в RichTextBox
)
int CaretPositionLine = richTextBox1.GetLineFromCharIndex(CaretPosition);