在文本编辑器中选择行

本文关键字:选择 编辑器 文本 文本编辑 | 更新日期: 2023-09-27 18:14:23

我尝试在一个基本的编辑器类型的应用程序中实现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;

在文本编辑器中选择行

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

的方法

TextBoxBase。GetFirstCharIndexFromLine

如果你的用户想转到第10行(你有10行)那么

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

我想@Steve已经让你用TextBox.GetFirstCharIndexFromLine()了。

在您的原始代码中,虽然,我认为您只需要考虑每行末尾的回车/换行(当通过Lines()属性访问每行时不包括它们)。这个例子假设想要的行号是1(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();