utilizzando OpenFileDialog per la directory, non FolderBrowserDialog

Voglio avere un browser di cartelle nella mia applicazione, ma non voglio usare FolderBrowserDialog. (Per diversi motivi, ad esempio è doloroso da usare)

Voglio usare lo standard OpenFileDialog, ma modificato per le directory.

Ad esempio, μTorrent ha una buona implementazione di esso (Preferenze / Directory / Inserisci nuovi download in :). La finestra di dialogo Apri file standard consente all’utente di:

  • incollare percorsi completi nel campo di testo in basso
  • usa la barra “Collegamenti preferiti” su Vista
  • usa Cerca su Vista
  • auto ricorda l’ultima directory
  • Di Più…

Qualcuno sa come implementarlo? In C #.

Non sono sicuro di uTorrent, ma suona molto simile al nuovo IFileDialog di Vista con il set di opzioni FOS_PICKFOLDERS. Il codice generico di C # andrebbe qualcosa come:

var frm = (IFileDialog)(new FileOpenDialogRCW()); uint options; frm.GetOptions(out options); options |= FOS_PICKFOLDERS; frm.SetOptions(options); if (frm.Show(owner.Handle) == S_OK) { IShellItem shellItem; frm.GetResult(out shellItem); IntPtr pszString; shellItem.GetDisplayName(SIGDN_FILESYSPATH, out pszString); this.Folder = Marshal.PtrToStringAuto(pszString); } 

Il codice completo può essere trovato qui .

Vedi questa risposta di leetNightShade per una soluzione di lavoro.

Ci sono tre cose che credo rendono questa soluzione molto migliore di tutte le altre.

  1. E ‘semplice da usare. Richiede solo di includere due file (che possono essere combinati in uno solo) nel progetto.
  2. Torna al FolderBrowserDialog standard quando viene utilizzato su XP o sistemi precedenti.
  3. L’autore concede il permesso di utilizzare il codice per qualsiasi scopo tu ritenga opportuno.

    Non c’è una licenza in quanto tu sei libero di prendere e fare con il codice quello che vuoi.

Scarica il codice qui .

WindowsAPICodePack

 var dlg = new Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog(); dlg.IsFolderPicker = true;