2

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

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

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

即使您使用箭头键移动光标,如何以跟踪它的方式获取光标的当前行?

我在 Win8 中使用 VS2012。

编辑: terrybozzio 的回答显示了问题。对于其他有此问题的人,您不能将代码放在richTextBox1_TextChanged 中。你需要把它放在richTextBox1_SelectionChanged 中。

4

1 回答 1

9

首先您需要获取 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();
}
于 2013-07-28T15:59:53.800 回答