【问题标题】:How to get the Caret Position from mouse clicking point in a RichTextBox?如何从 RichTextBox 中的鼠标单击点获取插入符号位置?
【发布时间】:2018-11-17 16:13:51
【问题描述】:

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

谁能告诉我,是否有任何可能让它在 Windows 窗体中工作?

【问题讨论】:

  • 但我在 WinForms RichTextBox 中找不到这样的方法再努力一点!

标签: c# winforms richtextbox


【解决方案1】:

单击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);
}

Line 位置由GetLineFromCharIndex 方法返回:
Lines 数组指的是用换行符分隔的文本部分(RichTextBox 中的\n

int CaretPositionLine = richTextBox1.GetLineFromCharIndex(CaretPosition);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2016-07-12
    • 1970-01-01
    • 2015-08-26
    相关资源
    最近更新 更多