簡體   English   中英

從 C# 中的打開文件對話框中排除文件擴展名

[英]Excluding file extensions from open file dialog in C#

我正在嘗試在我的 C# openFileDialog 上放置一個過濾器,以排除某些文件擴展名。 例如,我希望它顯示目錄中不是 .txt 文件的所有文件。

有沒有辦法做到這一點?

我不認為這是可能的。 過濾器的設置方式是您可以選擇要顯示的文件,但我認為沒有辦法顯示“除...之外的所有文件”。 想想看,你有沒有在 Windows 中看到一個打開文件對話框有這個? 我想我從來沒有見過一個。

最好的辦法是讓他們選擇所有文件,然后提示用戶是否選擇了不允許的文件,或者將其過濾為您可以處理的所有可能文件。

使用 BCL OpenFileDialog 沒有直接的方法來做到這一點。

我可以想到幾個選項:

1) 制作一個只包含您想要支持的所有類型的過濾器。 這將是我的建議,因為這是進行此類操作的最常見方式。

2) 使用與此自定義 OpenFileDialog 實現類似的內容。 如果所選文件具有 .txt 擴展名,則您可以覆蓋 OnFileNameChanged() 方法以潛在地禁用“打開”按鈕。

3) 讓用戶選擇一個 .txt 文件,拋出一個錯誤對話框,然后重新打開文件對話框。 不過,這對我來說感覺很笨重而且不太好......

通過 Google 搜索“OpenFileDialog”找到

編輯:很抱歉沒有擴展 EXCLUDE 方面。 你可能不需要走到這個極端,但它會滿足你的需求......

  • 對用戶可以選擇的所有文件進行遞歸目錄搜索。 (希望這是一小組文件夾。)
  • 唯一標識這些文件的擴展名。 (System.IO.Path.GetExtension() 和 Linq 的 .Distint() 方法可能在這里工作得很好)
  • 從列表中刪除“.txt”條目。
  • 通過循環遍歷這些擴展來構建過濾器字符串。

恐怕這是不可能的。 你要么必須

  • a) 包括一長串應該允許的所有擴展名,或

  • b) 允許所有擴展名,然后使用簡單的簽入代碼,如果所選文件的擴展名是.txt則重新打開對話框。

另外,您能否為這個問題提供更多背景信息? 我無法設想我可能明確需要排除某個擴展名的場景。 在幾乎所有情況下,您可能無法僅使用過濾器(可能還有一些代碼檢查)就可以逃脫。

這是一種完全不同的方法,您不太可能使用它。

不使用 OpenFileDialog,而是分析您需要的特定功能並創建您自己的對話框。 您可以輕松地提供您想要的任何過濾,但隨后困難就轉移到了實現和維護新 UI 上。

我不建議你這樣做,但有時用戶會非常堅持他們需要什么。

另一個替代方案:不要使用對話框,而是想出一些完全不同的、適合應用程序的東西。 這可能是不可能的,但是我們對該應用程序了解不多。

您不能設置過濾器以從文件對話框中排除擴展名。

但是,您可以在對話框上為FileOk事件實現一個委托。 此事件在用戶選擇的文件被接受之前觸發,事件參數提供了一個Cancel屬性,您可以將其設置為禁止選擇。

它不像實際上使錯誤的文件不可見那樣優雅,但它允許您禁止選擇錯誤類型的文件。

PS:不要忘記給用戶反饋為什么文件不被接受,否則他們可能想知道為什么在選擇“txt”文件時對話框沒有關閉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM