前回はノードを追加する操作を追加しました。今回はデータをファイルとして保存する機能を追加します。

SyncTreeViewではTreeNodeExのリストを取得するメソッドとしてGetTreeNodeExsを作成しました。

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

ということでこれを使えば簡単にできそうです。

ファイルとして保存する

まずこんなクラスをつくります。

これでは例外が発生します。

Dataをシリアル化できるようにする必要があります。そこでコンストラクタ内で

そしてXmlSerializerのコンストラクタの第二引数にtypes.ToArray()を渡すと例外は発生しません。

おっと、そのまえにRichDataにデータを保存する必要があります。

ファイルを読み出すときは読み出したデータからノードを再構築する必要があります。これもSyncTreeView.RestoreNodesメソッドを使えば実現することができます。

さてノードの開閉状態も保存できるようにしましょう。実は保存はされています。反映されていないだけです。

こうすればファイルが読み込まれたときに開閉状態も復元されます。

SyncTreeViewでは以下のような処理がおこなわれます。

あとCtrl+Sを押すと上書き保存できるようにしてみましょう。

ファイルが正常に保存されたり開かれた場合、そのファイルのパスを保存しておきます(フィールド変数 curFilePath)。「保存」メニューにショートカットキーを設定しておけば、Ctrl+Sが押されたときにsaveFileToolStripMenuItem_Clickが呼ばれます。フィールド変数 curFilePathに有効なファイルパスが格納されていない場合は保存ダイアログが表示されます。

これでCtrl+Sを押すと上書き保存ができるようになります。