C#获取RichTextBox中的光标行

本文关键字:光标 获取 RichTextBox | 更新日期: 2023-09-27 18:25:25

在C#中,我有一个RichTextBox,我想获取光标的当前行。我找到的每个答案都说要使用:

int currentLine = richTextBox1.GetLineFromCharIndex(richTextBox1.SelectionStart);

但是,richTextBox1.SelectionStart仅在您更改文本时更新。如果用箭头键移动光标,它不会更新(我已经通过在移动时打印SelectionStart来验证这一点)。

如何获取光标的当前行,即使使用箭头键移动光标也能跟踪它?

我在Win8中使用VS2012。

编辑:terrybozzio的回答说明了问题所在。对于其他有此问题的人,您不能将代码放在richTextBox1_TextChanged中。您需要将其放入richTextBox1_SelectionChanged中。

C#获取RichTextBox中的光标行

首先需要获取selectionstart,如果没有对于任何选定的文本,返回的值都是插入符号的位置(从文本开始以字符为单位偏移),然后调用getlinefromcharindex并传递该值,将其放置在selectionchanged事件中,即使箭头键移动插入符号位置,它也会更新:

private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
    int index = richTextBox1.SelectionStart;
    int line = richTextBox1.GetLineFromCharIndex(index);
    label1.Text = "cursor at line " + line.ToString();
}