ファイル・オープン・ダイアログ、ファイル・セーブ・ダイアログでは、表示されるファイルを拡張子でフィルタリングすることができます。この機能を使うとファイルが探しやすくなります。
使用するフィルタは、ダイアログ内のコンボ・ボックスで、選択することで利用できます。
プログラム内で、オープン・ファイル・ダイアログやセーブ・ファイル・ダイアログを使用する場合、自分で、Filterプロバティに拡張子フィルターを設定する必要があります。
拡張子フィルターを登録する
拡張子フィルターの記述例は、拡張子の説明の後に、パイプ文字「|」、その後に、「*.」、そして、拡張子です。
OpenFileDialog dlg = new OpenFileDialog();
// Filter by All Files
dlg.Filter = "テキスト文書|*.txt";
dlg.ShowDialog();
1つの項目で、複数の拡張子を指定する
1つの項目で、複数の拡張子を指定する場合、拡張子をセミコロン「;」で区切って並べて記述します。
OpenFileDialog dlg = new OpenFileDialog();
// Filter by All Files
dlg.Filter = "テキスト文書|*.txt;*.text";
dlg.ShowDialog();
複数の拡張子フィルターを登録する
拡張子フィルターのコンボボックスに、複数の拡張子フィルターを登録するには、さらに、パイプ文字「|」で、区切って、その後に、同じように記述します。
OpenFileDialog dlg = new OpenFileDialog();
// Filter by All Files
dlg.Filter = "テキスト文書|*.txt|タブ区切り値|*.tsv|すべてのファイル|*.*";
dlg.ShowDialog();
あるいは、「+」演算子を使って以下のように記述することもできます。
OpenFileDialog dlg = new OpenFileDialog();
// Filter by All Files
dlg.Filter = "テキスト文書|*.txt|" + "タブ区切り値|*.tsv|" + "すべてのファイル|*.*";
dlg.ShowDialog();
「+」演算子を使って複数の文字列を連結して、1つの文字列に加工しているだけなので、この記述を使うときは、それぞれの末尾のパイプ文字「|」の有無に注意が必要です。
これで、Filterプロパティは、1つの文字列に、区切り文字を使って、フィルタリングに使用する複数の拡張子を記述することが理解できたと思います。
配列で、フィルタリング拡張子を管理する
この方法だと、記述されている内容を判別しにくいので、スペルミスや記述ミスに気が付きにくい問題があります。
解決方法として、フィルタリングに使用する拡張子を配列で、管理し、Filterプロパティに設定する際につなげて指定する方法があります。定数の連結なので、おそらく、コンパイルの際に実行され、実行速度には、影響を及ぼさないと思います。
OpenFileDialog dlg = new OpenFileDialog();
string[] filters = new string[]
{
"テキスト文書|*.txt;*.text",
"タブ区切り値|*.tsv",
"すべてのファイル|*.*"
};
// Filter by All Files
dlg.Filter = String.Join("|", filters);
dlg.ShowDialog();
フィルタリングに使用する拡張子と説明は、まとめておく
フィルタリングに使用する拡張子と説明は、自分で入力する必要があるので、表計算ソフトウェアやテキストエディタなどを使って、再利用しやすいように、整理して保存しておいたほうが良いと思います。