2013-02-18 44 views
4

我目前正在開發一款運行WES7的嵌入式設備的軟件。該應用程序是一個標準的.NET 3.5 WinForms項目。如何在OpenFileDialog窗口中隱藏功能和可選文件夾/驅動器?

要求是用戶應該能夠從他們的pendrive或網絡瀏覽和選擇特定文件,但不能從系統驅動器上的任何位置選擇。所以我正在尋找一種解決方案來隱藏標準OpenFileDialog窗口上的鏈接和按鈕,所以用戶只會看到他們的Pendrives(如果有)或網絡地址鏈接。

我在MSDN和其他論壇上已經搜索過,直到現在我都找不到任何想法。如果沒有辦法使用標準的OpenFileDialog來完成這項工作,那麼是否有任何簡單的自定義組件用於瀏覽限於指定驅動器或父文件夾的文件?

+1

號使用FileOk事件,以防止你不喜歡的選擇。 – 2013-02-18 17:13:06

+0

我知道這個事件,但在這種情況下這是非常難看的解決方案。看起來我必須實現我自己的文件瀏覽器...... – 2013-02-18 17:25:41

+0

不是說漢斯是錯的,但是當我們在一個應用程序上一起工作時,x-MSFT做到了這一點,我會要求他提供代碼,因爲我需要這個完全一樣的東西 - 再次。 – 2013-06-04 04:10:00

回答

1

在這裏你去,它的那麼容易,因爲Customizing Your Open File Dialog

的OpenFileDialog類公開一組屬性來配置 對話框。例如,您可以選擇初始目錄,最初的 篩選索引,窗口標題,是否可以選擇多個文件 ,以及應用程序的當前目錄是否應該在關閉前恢復爲 。每當用戶點擊打開按鈕,該課程也會觸發一個事件(稱爲FileOk) 。

OpenFileDialog是一個密封類,所以你不能從它派生。 但是,如果要自定義文件對話框的行爲,則可以在 範圍內創建一個衍生自抽象類FileDialog的全新類 。在這種情況下,您可以使用 訪問幾個強大但受保護的方法,如HookProc 和RunDialog。 HOOKPROC定義對話框掛鉤過程, 增加特定功能的通用對話框....

更新:

在Windows 7 PC的它不工作。例如:

OpenDialogPlaces o = new OpenDialogPlaces(); 
//o.Places.Add(18); 
//o.Places.Add(5); 
//o.Places.Add(6); 
o.Init(); 
o.OpenDialog.ShowDialog(); 
o.Reset(); 

仍顯示在左側的一切:

enter image description here

這在以前的Windows版本做了工作:

enter image description here

另一件事看來微軟已經改變了ComDlg32的位置,我嘗試了兩個地方,但沒有運氣。

enter image description here

+0

對不起,很晚的反應。那一次,我發現那篇文章,並且發現自己在Windows 7上無法運行,也沒有WES7(期待)。最後,我解決了FilOk事件的問題,它很難看但是令人滿意。無論如何,我會答應你的答案,因爲目前似乎沒有其他解決方案。 – 2014-10-22 07:10:00