Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
842 views
in Technique[技术] by (71.8m points)

winforms - C# Get cursor line in RichTextBox

In C#, I have a RichTextBox, and I want to get the current line of the cursor. Every answer I've found says to use:

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

However, richTextBox1.SelectionStart only updates when you make changes to the text. If you move the cursor with the arrow keys, it does not update (I've verified this by printing SelectionStart as I move around).

How do I get the current line of the cursor, in a way that tracks it even if you use the arrow keys to move the cursor around?

I'm using VS2012 in Win8.

Edit: terrybozzio's answer showed the problem. For anyone else with this problem, you can't put the code in richTextBox1_TextChanged. You need to put it in richTextBox1_SelectionChanged.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

First you need to get selectionstart,If there isn't any selected text, the value returned is the position of the caret(with offset in characters from the start of the text),then you call getlinefromcharindex and pass that value,place it in the selectionchanged event and even with arrow keys moving the caret position it will update:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...