5

特定のファイル拡張子を除外するフィルタを C# openFileDialog に適用しようとしています。たとえば、ディレクトリ内の .txt ファイルではないすべてのファイルを表示したいとします。

これを行う方法はありますか?

4

6 に答える 6

4

これは不可能だと思います。フィルターの設定方法は、表示するファイルを選択できるということですが、「...を除くすべてのファイル」を表示する方法はないと思います。そういえば、Windows の [ファイルを開く] ダイアログにこれが表示されているのを見たことがありますか? 私は一度も見たことがないと思います。

最善の策は、ユーザーにすべてのファイルを選択させてから、許可されていないファイルを選択するか、処理できる可能性のあるすべてのファイルにフィルターをかけるかどうかをユーザーに確認することです。

于 2009-05-28T16:51:34.707 に答える
2

BCL OpenFileDialog を使用してこれを行う直接的な方法はありません。

いくつかのオプションを考えることができます:

1)サポートしたいすべてのタイプを含むフィルターを作成します。これは、このタイプの操作を実行する最も一般的な方法であるため、私の推奨事項です。

2) このカスタム OpenFileDialog 実装の行に沿って何かを使用します。次に、OnFileNameChanged() メソッドをオーバーライドして、選択したファイルの拡張子が .txt の場合、[開く] ボタンを潜在的に無効にすることができます。

3) ユーザーに .txt ファイルを選択させ、エラー ダイアログを表示させ、ファイル ダイアログを再度開きます。これは不格好で、私にはあまり良くありませんが....

于 2009-05-28T16:52:16.500 に答える
1

Google 検索「OpenFileDialog」で見つけました

編集: EXCLUDE の側面を拡張しないことについて申し訳ありません。ここまで極端にする必要はないかもしれませんが、それはあなたのニーズを満たすでしょう....

  • ユーザーが選択できるすべてのファイルの再帰的なディレクトリ検索を実行します。(うまくいけば、それは小さなフォルダーのセットです。)
  • それらのファイルの拡張子を一意に識別します。(System.IO.Path.GetExtension() および Linq の .Distint() メソッドはここでうまく機能する可能性があります)
  • リストから「.txt」エントリを削除します。
  • これらの拡張子をループしてフィルター文字列を構築します。
于 2009-05-28T16:46:25.373 に答える
0

これはまったく異なるアプローチであり、使用する可能性はほとんどありません。

OpenFileDialogを使用する代わりに、必要な特定の機能を分析して、独自のダイアログボックスを作成します。必要なフィルタリングを簡単に提供できますが、その場合、新しいUIの実装と保守に問題が移ります。

これを行うことはお勧めしませんが、ユーザーが必要なものに固執する場合があります。

別の方法:ダイアログを使用する代わりに、アプリ内に収まるまったく異なるものを考え出します。これは不可能かもしれませんが、その場合、私たちはアプリについてあまり知りません。

于 2009-05-28T17:34:54.637 に答える
0

これは不可能だと思います。あなたはどちらかをしなければならないでしょう

  • a) 許可されるべきすべての拡張子の長いリストを含める、または

  • b) すべての拡張子を許可し、選択したファイルの拡張子が.txt.

また、この質問についてもう少し背景を説明していただけますか? 特定の拡張子を明示的に除外する必要があるシナリオを想定するのに苦労しています。ほぼすべての状況で、フィルターだけ (およびコードを少しチェックインすること) だけではおそらくうまくいかないでしょう。

于 2009-05-28T16:55:16.493 に答える