ファイルやフォルダにタグをつけ検索できるアプリケーションを作成してきましたが、これまでは検索結果はファイルパスでソートされているだけでした。今回はファイルとフォルダに重要度をつけて重要度が高い順にソートして表示できるようにします。

また同じファイルやフォルダでも検索するワードによって重要度が違います。それぞれのワードで表示順序を変更することができるようにします。

まず重要度を管理するオブジェクトを作成し、これをFileTagオブジェクト内に格納します。

次に検索結果を表示するフォームですが、コントロールを追加します。

重要度を表示するNumericUpDownコントロールとメニューを追加しました。それからリストビューの項目が増えました。

[表示]からアイコンの大きさを変更できるようにしました。IconSizeプロパティが変更されると再度検索がおこなわれ、リストビューが再描画されます。

SearchFileTags(string newKeyword)は検索をして検索結果を表示するためのメソッドです。同じキーワードで自動的に検索しなければならないかもしれないので、フィールド変数に検索ワードを格納しています。

このなかで呼び出されている GetFolderImage()メソッド、GetFileImage(string path)メソッド、GetListItemImage(Image image, int size)メソッドは「画像ファイルなら画像で表示する」と同じものです。

画像ファイルなら画像で表示する ファイルやフォルダにタグをつける

上記のメソッドを作成したので、[検索]ボタンが押されたときの処理を変更しました。ここには長々とコードを書かず上記のメソッドを呼び出すだけにしました。

SaveOldData()メソッドはリストビューにおいて新しいアイテムが選択されたときに、これまで選択されていたものに対応するデータを保存するために呼び出されるものです。新たに別のキーワードで検索されるときにもこれまで選択されていたものに対応するデータを保存する必要があるので呼び出されます。

SearchWhenNotExist()メソッドは選択されたファイルまたはフォルダが存在しないときに呼び出されます。エラーを示すメッセージボックスを表示したあと、検索をやり直します。

LoadNewData()メソッドは新しいアイテムが選択されたときに、それに対応するデータをロードして表示するメソッドです。

リストビューで選択されているアイテムが変更されたときにはイベントハンドラ listView1_SelectedIndexChanged内でSelectedPathプロパティが変更されます。

SelectedPathプロパティは以下のようになっています。

LoadNewData()メソッドは新たに選択されたアイテムに関連づけられたデータを表示するためのものです。最初にSelectedPathプロパティが有効なパスなのかどうかを調べています。もしSelectedPathプロパティが有効なパスではない場合はエラーメッセージを表示して検索しなおします。ただしSelectedPath == “”のときは何もしません。

リストビューのアイテムがダブルクリックされた場合は有効なパスかどうか調べ、フォルダであればエクスプローラーで開き、ファイルであれば関連付けられているアプリケーションで開きます。有効なパスでなければエラーメッセージを表示して検索をやりなおします。

検索結果は重要度順に並ぶようになっていますが、自分で値を指定すると値が大きい順にはならなくなります。

メニューで[重要度順に並べ替える]を選択すると検索結果を重要度順に並べなおします。