0

我的自定义 RichTextBox 控件有一些问题。

RichTextBox 似乎没有任何“线条”集合的概念。但我需要逐行管理文本。

有没有办法获取和更新 RichTextBox 中的一行文本?

我要进行的确切方案是查看 RichTextBox 中的每一行,如果该行有超过 60 个字符,则在第 60 个字符Environment.NewLine之后插入一个。

更新:我发现您可以使用以下代码获取一行:

richTextBox.Document.ContentStart.GetLineStartPosition(lineNumber); 

但是我仍然没有办法更新一行。

4

2 回答 2

1

您只需遍历行,检查长度,如果长度超过 60,则添加一个新行字符。对行中的所有字符重复,并返回结果。

下面是代码的概要

private void richTextBox1_KeyUp(object sender, KeyEventArgs e)
{
    TextPointer line = richTextBox1.CaretPosition.GetLineStartPosition(0);
    if (line.GetOffsetToPosition(richTextBox1.CaretPosition) > 60)
    {
        line.GetPositionAtOffset(60, LogicalDirection.Forward).InsertLineBreak();
    }
}

如果您正在运行一次格式化,上面的代码很有用。

于 2012-12-12T17:22:48.323 回答
0

如果当前行太长,此代码将添加一个新行。(这只适用于当前行,因此需要适应更多行进行粘贴。)

    private const int lineLimit = 60;
    private static void BlockCurrentToNotExceedMaxChars(TextPointer currentLocation)
    {
        var currentStart = currentLocation.GetLineStartPosition(0);
        var nextStart = currentLocation.GetLineStartPosition(1);
        var currentEnd = (nextStart != null ? nextStart : currentLocation.DocumentEnd).GetInsertionPosition(LogicalDirection.Backward);

        TextRange currentLine = new TextRange(currentStart, currentEnd);
        if (currentLine.Text.Trim().Length > lineLimit)
        {
            currentStart.GetPositionAtOffset(lineLimit + 1).InsertLineBreak();
        }
    }
于 2012-12-13T16:12:21.813 回答