在WPF RichTextBox的每一行中的第60个字符后面插入一个'Return'

时间:2012-12-12 16:51:48

标签: c# .net wpf richtextbox

我的自定义RichTextBox控件遇到了一些问题。

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

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

我想要的确切方案是查看RichTextBox中的每一行,如果该行有超过60个字符,请在第60个字符后插入Environment.NewLine < / p>

更新: 我发现你可以使用这段代码获得一行:

richTextBox.Document.ContentStart.GetLineStartPosition(lineNumber); 

但我仍然无法更新一行。

2 个答案:

答案 0 :(得分: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();
    }
}

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

答案 1 :(得分: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();
        }
    }