Как получить позицию каретки из точки щелчка мышью в RichTextBox? - PullRequest
0 голосов
/ 17 ноября 2018

Мне нужно изменить положение каретки текста RichTextBox на положение щелчка мышью. Я сделал это в WPF RichTextBox, используя встроенный метод GetPositionFromPoint.
Но я не могу найти такие методы в WinForms RichTextBox.

Может кто-нибудь сообщить мне, есть ли возможность заставить его работать в Windows Forms?

1 Ответ

0 голосов
/ 17 ноября 2018

При нажатии на текстовое содержимое элемента управления 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);
...