在文本编辑器中转到行

时间:2013-05-20 22:37:05

标签: c# .net winforms

我尝试在基本的编辑器类型的应用程序中实现GoTo ling,但并不总是准确的。通常情况下,它会获得正确的线条,但似乎线条越多,线条位置错误的可能性越大,走错线。不知道为什么这不起作用。有人可以帮忙吗?

int position = 0;
int lineCount = ((TextBox)tabControl1.SelectedTab.Controls[0]).Lines.Count();

for (int i = 0; i < LineNumber; i++)
{
     position += ((TextBox)tabControl1.SelectedTab.Controls[0]).Lines[i].Count();
}

((TextBox)tabControl1.SelectedTab.Controls[0]).Focus();
((TextBox)tabControl1.SelectedTab.Controls[0]).SelectionStart = position;
((TextBox)tabControl1.SelectedTab.Controls[0]).ScrollToCaret();
LineNumber = 0;
position = 0;
lineCount = 0;

2 个答案:

答案 0 :(得分:5)

我不确定我是否理解正确,但TextBox控件有一个名为

的方法

TextBoxBase。GetFirstCharIndexFromLine

因此,如果您的用户想要转到第10行(并且您有10行),那么

 int pos = textBox1.GetFirstCharIndexFromLine(9);
 textBox1.SelectionStart = pos;
 textBox1.ScrollToCaret();

答案 1 :(得分:0)

我认为@Steve已经为您提供了TextBox.GetFirstCharIndexFromLine()。

在您的原始代码中,我认为您只需要考虑每行末尾的回车符/换行符(当通过Lines()属性访问每一行时不包括它们)。此示例假定所需的行#是1(一)基于:

        int LineNumber = 6;

        TextBox TB = (TextBox)tabControl1.SelectedTab.Controls[0];

        int position = 0;
        for (int i = 1; i <= TB.Lines.Length && i < LineNumber; i++)
        {
            position += TB.Lines[i - 1].Length + Environment.NewLine.Length;
        }

        TB.Focus();
        TB.SelectionStart = position;
        TB.SelectionLength = 0;
        TB.ScrollToCaret();