从文本框中获取行的索引 C#

4
有没有一种程序化的方式可以在WPF中的TextBox元素中获取特定行开头的插入符索引?
例如,选择第20行:
my_textbox.GetLineIndex(20);

我希望获取这个信息,以便我可以将其用作my_textbox.SelectionStart的值。

有一个my_textbox.ScrollToLine(20),但我不认为这会给我索引?


1
如果一行滚动到文本框的末尾并进入下一行,那怎么办?你想将其视为第二行,还是只将CR + LF对视为换行符? - Belogix
@Belogix 我想把CR+LF视为换行符。谢谢 :) - Luke
3个回答

3
我认为没有内置的方法,但您可以尝试使用这样的扩展方法。
public static int GetLineIndex(this TextBox textbox, int line)
{
    var text = textbox.Text;
    var thisLine = 0;
    for (var i = 0; i < text.Length; i++)
    {
        if (thisLine == line)
            return i;

        if (text[i] == '\n')
            ++thisLine;
    }

    throw new ArgumentOutOfRangeException();
}

太好了,谢谢!我忘记了字符串只是字符数组! - Luke

1
您可以使用按钮单击多行文本框。
        string findText = "sample";
        int charIndex = txtSource.Text.IndexOf(findText);

        MessageBox.Show(txtSource.GetLineFromCharIndex(charIndex).ToString());

        or
        MessageBox.Show(txtSource.GetLineFromCharIndex(txtSource.Text.IndexOf("sample")).ToString());

请考虑添加一份说明,解释您的代码如何解决 OP 的问题。 - Benjamin Lowry

1
你可以通过使用 "GetCharacterIndexFromLineIndex" 函数简单地获得特定行的插入符索引。
你可以在此链接中查看有关此函数的更多信息:Microsoft Documentation for GetCharacterIndexFromLineIndex 这将返回所需行的起始处插入符索引。
int startIndex = my_textbox.GetCharacterIndexFromLineIndex(lineNumber);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接