このまえ複数のTreeViewの内容を同期するプログラムを作成しました。

複数のTreeViewの内容を同期する

俺的ライブラリをつくる 同期化されたTreeView編

このときは最後にUserControlのなかにTreeViewをいれて隠蔽するプログラムにしましたが、今回は最初から隠蔽してしまいます。

単にふたつのRichTextBoxの内容を同じにするのであれば

ところがこれではUndoの処理がうまくできません。アンドゥバッファを共有することができればいいのですが、そのような方法はないみたいです。そこで自分でアンドゥバッファをつくります。

internal class RichTextBoxEx : RichTextBox

ユーザーコントロールを作成して名前はSyncRichTextBoxにします。そのなかにRichTextBoxExを貼り付けます。

そしてSyncRichTextBoxのなかにフィールド変数を作成してこれが同じコントロールの内容が同期されるようにします。

RichDataクラスの内容はこんな感じ。アンドゥバッファの操作や同期対象のコントロールを取得するメソッドで構成されています。

RichTextBoxInfoは内容が同期されるリッチテキストボックスに関する情報を格納したクラスです。

アンドゥバッファのクラスです。

RichDataの値はプログラムが実行されている最中に変更されることがあります。そこでその場合は古いDataにこれまでの編集データを格納するようにしています。また新しく設定されるDataに紐付けされたRichTextBoxがもつデータが反映されるようにしています。

それからRichTextBoxExのイベントはSyncRichTextBoxで処理をすることになるので以下を追加。

今回は準備作業で終わってしまいました。次回から本格的に始めます。