C# でファイルを開くダイアログからファイル拡張子を除外する
-
06-09-2019 - |
質問
C# openFileDialog に特定のファイル拡張子を除外するフィルターを設定しようとしています。たとえば、ディレクトリ内の .txt ファイルではないすべてのファイルを表示したいとします。
これを行う方法はありますか?
解決
BCL OpenFileDialogを使用してこれを行うには直接的な方法はありません。
私はオプションのカップルを考えることができます:
1)だけでサポートしたいん種類のすべてを持っているフィルタを確認します。それは、このタイプの動作について行くの最も一般的な方法ですので、これは、私の推薦となります。
2)本の線に沿って何か<のhref = "http://www.codeproject.com/KB/dialog/OpenFileDialogEx.aspx?fid=356223&df=90&mpp=25&noise=3&sort=Position&view=Quick&fr=26を使用します"REL =" nofollowをnoreferrer ">カスタムOpenFileDialog実装する。その後、選択したファイルが.txt拡張子を持つ場合、潜在的に、「開く」ボタンを無効にするOnFileNameChanged()メソッドをオーバーライドすることができます。
3)、ユーザーが.txtファイルを選択してみましょうエラーダイアログを投げると、ファイルダイアログを開きます。これはしかし、私にはあまりにも偉大な不格好ない感じ....
他のヒント
そんなことは不可能だと思います。フィルタの設定方法は、表示するファイルを選択できることですが、「...を除くすべてのファイル」を表示する方法はないと思います。考えてみると、Windows でこのようなファイルを開くダイアログを見たことがあるでしょうか?見たことないと思います。
最善の策は、ユーザーにすべてのファイルを選択させ、許可されていないファイルを選択するかどうかをユーザーに確認するか、処理できる可能性のあるすべてのファイルにフィルターをかけることです。
Google検索「OpenFileDialog」で見つかりました
編集:EXCLUDE の側面について詳しく説明していないのが残念です。ここまで極端にする必要はないかもしれませんが、それはあなたのニーズを満たすでしょう...
- ユーザーが選択できるすべてのファイルの再帰的ディレクトリ検索を実行します。(それが小さなフォルダーのセットであることを願っています。)
- これらのファイルの拡張子を一意に識別します。(ここでは System.IO.Path.GetExtension() と Linq の .Distint() メソッドがうまく機能する可能性があります)
- リストから「.txt」エントリを削除します。
- これらの拡張機能をループしてフィルター文字列を構築します。
残念ながらそれは不可能です。次のいずれかを行う必要があります
a) 許可するすべての拡張子の長いリストを含める、または
b) すべての拡張子を許可し、選択したファイルに拡張子がある場合はダイアログを再度開く単純なチェックイン コードを使用します。
.txt
.
また、この質問についてもう少し背景を教えていただけますか?明示的に行う必要があるシナリオを想像するのが困難です。 除外する ある拡張子。ほとんどすべての状況において、フィルターだけ (そして場合によってはコードを少しチェックインする) だけで回避することはおそらく不可能です。
ここであなたが使用しそうだ完全に異なるアプローチが、です。
代わりにOpenFileDialogを使用しての、あなたが必要とする特定の機能を分析し、独自のダイアログボックスを作成します。あなたが簡単にあなたがしたいが、その後、問題は、実装して新しいUIを維持する上を移動するものは何でもフィルタリング提供することができます。
私はあなたがこれを行うことを示唆していないが、時々、ユーザーが必要とするものにかなりしつこいです。
別の代替:代わりにダイアログを使用しての、アプリ内に十分収まる完全に異なる何かを思い付きます。これは可能ではないかもしれないが、我々はアプリについてあまり知りません。
あなたは、ファイルダイアログからの を除外する拡張子にフィルタを設定することはできません。
ただし、ダイアログ上のFileOk
イベントのデリゲートを実装することができます。選択したユーザーが受け入れられるだけのファイルの前にこのイベントが発生すると、イベント引数を使用すると、選択を許可しないように設定することができCancel
プロパティを提供します。
これは、実際に間違ったファイルが見えなくなっほどエレガントではありませんが、それはあなたがファイルの間違った種類の選択を禁止することができます。
PS:。彼らは「TXT」ファイルを選ぶとき、それ以外の場合は、ダイアログが閉じていない理由を不思議に思うかもしれません、ファイルが受け入れられなかった理由を、ユーザーからのフィードバックを与えることを忘れないでください。