2009-06-01 76 views
7

有沒有辦法修改OpenFileDialog的行爲,以便它查看打開到的文件夾中的文件,然後根據其內容忽略某些文件?基於內容過濾OpenFileDialog中顯示的文件?

一個例子是打開一個完整的Zip文件的文件夾,但只顯示包含某個文件的文件夾。

從文檔中,有HookProc,但我不確定如何使用它。

請注意,如果有可能,我意識到這將是一個相對緩慢的操作。目前我不關心性能。

謝謝!

回答

3

我不會忽視OpenFileDialog的複雜性。構建一個真正有效的程序並不容易。當你建立你自己的時候,它不是「正常」的對話框,因此它會讓用戶感到困惑。即使你做得很好也是如此,這很困難。所以我建議你堅持延伸現有的東西,而不是寫一些新東西。

檢查this article for an extension of OFD可能/可能會調整到做你想要的。在C#中編寫回調函數可以響應路徑選擇。

相關:FolderBrowserDialogEx是FolderBrowserDialog上的一個類似的擴展。儘管名稱不同,您可以將其配置爲搜索文件以及文件夾。有一個回調會在選擇某個東西(一個文件夾,一個文件)時被調用,並且在回調中你可以做你需要做的事情。例如,查看文件夾內的文件並填充僅顯示這些文件的文件列表。


您可能會考慮的另一種選擇是dialog library from Ookii。這是OpenFileDialog的開源實現,它包含了Vista中所有新對話框的COM包裝器。使用該庫,您可以彈出Vista OpenFileDialog,並使用C#代碼接收來自IFileDialogEvents接口的事件。一個這樣的事件是OnFolderChange()。在處理程序中,你可以調用IFolder.GetFolder(),它會給你一個IShellItem,它給你用戶正在改變的文件夾。下一步將逐項列出並潛在地過濾文件集,這是我將留給讀者的練習...

+0

有趣!我明天再看看。謝謝! – djcouchycouch 2009-06-02 01:42:37

1

不,您必須爲此實現您自己的功能。但說實話,無論如何,OpenFileDialog確實不會做很多事情。說實話,是的,你可能可以將它嵌入其中,但是當真正的工作是檢查文件的內容時,你會做很多工作,然後你可以編寫你自己的簡單的OpenFileDialog類那。

你可能會找到有關的zip文件列出內容這個問題有所幫助:

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

(注意,你可能線程它來提高性能,只是不跨越多個線程)