如何从RichTextBox中的鼠标单击点获得插入位置?

时间:2018-11-17 16:13:51

标签: c# winforms richtextbox

我需要将RichTextBox文本的插入符号位置更改为鼠标单击位置。我使用内置方法WPFRichTextBox GetPositionFromPoint中做到了。
但是我在WinForms RichTextBox中找不到任何这样的方法。

任何人都可以让我知道,有没有可能使它在Windows窗体中运行?

1 个答案:

答案 0 :(得分:2)

单击RichTextBox控件的“文本”内容时,插入符号位置将移动到控件内部的鼠标指针位置。现在该位置是当前插入点。
插入符的新位置可以通过两种方式检索:

检查SelectionStart属性:

int CaretPosition = richTextBox1.SelectionStart;

使用MouseEventArgs e.Location返回的鼠标指针位置。
在这种情况下,您可以使用GetCharIndexFromPosition方法:

int CaretPosition = richTextBox1.GetCharIndexFromPosition(e.Location);

如果比较SelectionStartGetCharIndexFromPosition返回的值,则可以验证这些值相等。

如果您希望插入符号在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);