0

カスタム RichTextBox コントロールに問題があります。

RichTextBox には、「Lines」コレクションの概念がないようです。しかし、テキストを行ごとに管理する必要があります。

RichTextBox のテキスト行を取得して更新する方法はありますか?

私がしようとしている正確なシナリオは、RichTextBox の各行を見て、行が 60 文字を超えている場合はEnvironment.NewLine、60 番目の文字の後に a を挿入することです。

更新: 次のコードで行を取得できることがわかりました:

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 に答える