2013-07-28 40 views
1

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

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

然而,richTextBox1.SelectionStart只有更新时,您更改文本。如果用箭头键移动光标,它不会更新(我通过在移动时打印SelectionStart来验证此问题)。

我如何获取光标的当前行,在其跟踪的方式,即使你使用箭头键移动光标?

我使用Win8的VS2012。

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

+0

在什么情况下您调用该方法? – keyboardP

+0

当我移动箭头键时,我能够看到选择开始更改。 –

+0

你不能把支票放在keydown事件中吗?然后当你用箭头键移动它时,它会更新。 – Nick3

回答

4

首先,您需要获取selectionstart,如果没有 任何选定的文本,则返回的值是插入符号的位置(文本开头的字符偏移量),然后调用getlinefromcharindex并传递值,将其放入choosechanged事件中,即使使用方向键移动插入位置,它也会更新:

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