2009-06-01 11 views
7

OpenFileDialogの動作を変更して、開いているフォルダ内のファイルを調べ、その内容に基づいて特定のファイルを無視する方法はありますか?コンテンツに基づいてOpenFileDialogに表示されるファイルをフィルタリングしますか?

例としては、Zipファイルでいっぱいのフォルダを開き、特定のファイルを含むフォルダのみを表示するという例があります。

ドキュメントには、HookProcがありますが、私はそれをどのように使用するのか正確には分かりません。

可能であれば、それは比較的遅い操作であることを認識しています。現時点では、私はパフォーマンスについて心配していません。

ありがとうございます!

答えて

3

私はOpenFileDialogの複雑さを払拭しません。実際に動作するものを作るのは簡単ではありません。独自のビルドを行うと、それは「通常の」ダイアログではなく、結果としてユーザーに混乱を招くことになります。あなたがそれをうまくやっても、これは本当です。これは難しいことです。だから私は何か新しいものを書くのではなく、すでにあるものを広げることに固執することをお勧めします。

this article for an extension of OFDをチェックして、あなたが望むものを正確に行うことができます。パスの選択に応答するC#で記述するコールバックがあります。

関連:FolderBrowserDialogExは、FolderBrowserDialogの同様の拡張です。名前にもかかわらず、ファイルやフォルダを検索するように名前を設定できます。何か(フォルダ、ファイル)が選択されたときに呼び出されるコールバックがあり、そのコールバック内で必要な処理を行うことができます。たとえば、フォルダ内のファイルを調べて、そのファイルのみで表示するファイルのリストを作成します。


もう1つの選択肢は、dialog library from Ookiiです。これはOpenFileDialogのオープンソースの実装であり、Vistaのすべての新しいダイアログ用のCOMラッパーを含んでいます。そのライブラリを使用すると、Vista OpenFileDialogをポップアップして、IFileDialogEventsインターフェイスのイベントをC#コードで受け取ることができます。そのようなイベントの1つはOnFolderChange()です。ハンドラ内でIFolder.GetFolder()を呼び出すとIShellItemが表示され、ユーザが変更しているフォルダが表示されます。次のステップは、ファイルセットを項目化してフィルタリングすることです。これは読者に任せた練習です。

+0

興味深い!私は明日それをチェックします。ありがとう! – djcouchycouch

1

いいえ、独自の機能を実装する必要があります。しかし、正直言って、OpenFileDialogは本当に大したことはありません。正直言って、あなたはおそらくそれに夢中になるかもしれませんが、本当の仕事がファイルの内容を検査することであるなら、あなたは何のためにも多くの仕事をしているでしょうし、あなた自身の単純なOpenFileDialogクラスをそれ。

あなたはzipファイルの内容をリストに関するこの質問は役に立ち見つけるかもしれない:

How to list the contents of a .zip folder in c#?

(あなたが潜在的にだけ多くのスレッドをまたがらない、パフォーマンスを向上させるために、それをスレッドことができ、注意してください)

0

おそらくWindows APIコードパック(ソースに付属)を使用できます。共通ファイルダイアログ機能は、Winforms/WPFのバージョンよりも多くのファイルダイアログの機能を公開します。

http://code.msdn.microsoft.com/WindowsAPICodePack

関連する問題