これは行頭にタブ文字を入れているのではありません。RichTextBox.SelectionIndentプロパティを設定することで行頭を右に寄せています。

では複数のRichTextBoxでインデントを同期させる方法について考えてみましょう。

やはり行頭にカーソルをもっていくことができればSelectionIndentに値を代入するだけでできるので、行頭を取得することから始めます。やることはこれとにています。

RichTextBoxで「中央揃え」「左揃え」「右揃え」をする方法 内容が同期されたRichTextBox(その12)

SelectionIndent
SelectionHangingIndent
SelectionRightIndent

3種類あるのですが、似たような処理なので引数を変えて同じメソッドでやってしまいます。

行をまるごと選択できるようにして、あとはカーソルを行頭に移動させて SelectionIndentの値を取得しています。そしてIndentInfoオブジェクトに行頭の位置、変更前のSelectionIndentの値、変更後のSelectionIndentの値を格納して、これをリストにしてUndobufオブジェクトに格納しています。

SetIndentの第三引数で新しい値にセットするのか、現在の値にプラスするのか選べるようにしています。また0を下回った場合は0をセットしています。ここまできたら後は簡単。

これでインデントを変更することができます。

Undo、Redoにも対応しています。