假设我点击了RichTextBox控件中的某个位置。如何获得当前插入符号的当前行?
顺便说一下,这是检索该行的整个文本字符串。
答案 0 :(得分:12)
这对我有用:
this.WordWrap = false;
int cursorPosition = this.SelectionStart;
int lineIndex = this.GetLineFromCharIndex(cursorPosition);
string lineText = this.Lines[lineIndex];
this.WordWrap = true;
答案 1 :(得分:11)
这就是RichTextBox.GetLineFromCharIndex()的作用。传递SelectionStart属性值。
答案 2 :(得分:1)
一种方法是发送EM_LINEFROMCHAR Message。我相信还有其他方法。
答案 3 :(得分:1)
我的回答比文森特的回答还要厉害,因为在获得正确的行号之后,我发现它闪烁得非常可怕。因此,我添加了一个内存丰富的文本框来完成该工作。
private int GetCharacterIndexOfSelection()
{
var wordWrappedIndex = this.SelectionStart;
RichTextBox scratch = new RichTextBox();
scratch.Lines = this.Lines;
scratch.SelectionStart = wordWrappedIndex;
scratch.SelectionLength = 1;
scratch.WordWrap = false;
return scratch.SelectionStart;
}
private int GetLineNumberOfSelection()
{
var selectionStartIndex = GetCharacterIndexOfSelection();
RichTextBox scratch = new RichTextBox();
scratch.Lines = this.Lines;
scratch.SelectionStart = selectionStartIndex;
scratch.SelectionLength = 1;
scratch.WordWrap = false;
return scratch.GetLineFromCharIndex(selectionStartIndex);
}
答案 4 :(得分:-1)
如果您想从现在正在调试的编辑器控件中获取当前行号,那么
int lineNumber = (new StackTrace()).GetFrame(1).GetFileLineNumber();
我认为这对你的问题有帮助。