自作フォトビューアーに登録したファイルにコメントをつけることができるようにします。

まずDataクラスのなかにコメントを格納するフィールド変数をつくります。

それからウィンドウのサイズが変更されてもテキストボックスをうまく表示されるようにtextBox1のAnchorプロパティを設定します。またツリービューコントロールでBeforeSelectイベントを処理する必要があるのでイベントハンドラTreeView1_BeforeSelectを追加します。

これまではファイルパスがあれば画像を表示させることが可能でした。ファイル名はTreeNode.Textをそのまま使っていました。そしてXMLファイルに保存するときだけDataオブジェクトを生成して、これをシリアル化していました。これからはDataオブジェクトをTreeNode.Tagプロパティにセットする方法に変更します。

これに伴い変更する必要があるのは・・・

ツリービューコントロールにファイルがドロップされて新しいTreeNodeが追加されるときの処理
private void TreeView1_DragDrop(object sender, DragEventArgs e)

選択されているTreeNodeが変化した後の処理
private void TreeView1_AfterSelect(object sender, TreeViewEventArgs e)

ファイルを保存するときの処理
void SaveFile(string filePath)

ファイルを開くときの処理
void OpenFile(string filePath)

です(実はもうひとつあった)。

それから新しく定義しないといけないイベントハンドラは

選択されているTreeNodeのチェックボックスの状態が変化した後の処理
private void TreeView1_AfterCheck(object sender, TreeViewEventArgs e)

選択されているTreeNodeが変化する前の処理
private void TreeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)

です。

まずファイルをドラッグアンドドロップしたときにTreeNodeが追加されますが、このときの処理を変更しました。新しいTreeNodeを追加したらそのときにDataオブジェクトを作成してTreeNode.Tagにセットしてしまいます。

それからTreeNodeのチェックボックスの状態が変化した場合、すぐにData.IsCheckedを変更させます。

ファイルを開く、保存するときの動作も若干変更になります。

ファイルを開くときはDataオブジェクトからTreeNodeを生成し、このDataオブジェクトをTreeNode.Tagにセットしてしまいます。保存するときはTreeNode.TagからDataオブジェクトを取得することができるので、これをそのままシリアル化します。

TreeNodeが選択されたらこれまで選択されていたTreeNodeに相当するDataオブジェクトにコメントを格納し、新たに選択されたTreeNodeに相当するDataオブジェクトからコメントを取得してテキストボックスに表示させます。

これで画像にコメントをつけることができました。

それからもうひとつ変更する場所がありました。サムネイルを表示させるダイアログから戻ってきたときにTreeViewの再構築がおこなわれますが、ここでもTreeNode.TagにDataオブジェクトをセットすることをわすれてはいけません。

それからサムネイルを表示しているときもコメントを編集できるようにしたいものです。そこでFormThumbnailクラスを修正します。

左クリックされたら順番を入れ替えるためのドラッグの開始とみなします。そして右クリックならダイアログを表示してコメントを編集できるようにします。

これはコメント編集用のダイアログです。

これで画像にコメントを残すことができました。次回はコメントのなかのキーワードを検索してその結果を表示できるように改良することにします。

ファイルをコメントから検索する 自作フォトビューアー