2013-07-28 75 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(); 
}