2009-03-01 11 views
13

Desidero avere un browser Cartella nella mia applicazione, ma Io non voglio utilizzare il FolderBrowserDialog. (Per diversi motivi, ad esempio è doloroso da utilizzare)utilizzando OpenFileDialog per directory, non FolderBrowserDialog

Desidero utilizzare lo standard OpenFileDialog, ma modificato per le directory.

Ad esempio, µTorrent ha una buona implementazione di esso (Preferenze/Directory/Inserisci nuovi download in :). Lo standard Apri file di dialogo consentono all'utente di:

  • pasta percorsi completi nel campo di testo in basso
  • uso bar "Collegamenti preferiti" su Vista
  • uso Cerca su Vista
  • auto ricordare ultima directory
  • altro ...

qualcuno sa come implementare questa? In C#.

+1

Sembra una vittima di http://stackoverflow.com/questions/31059/how-do-you-configure-an-openfiledialog-to-select-folders –

+0

duplicati di questa domanda: - [Come configurare un OpenFileDIalog per selezionare le cartelle?] (Http://stackoverflow.com/questions/31059/) – CMS

risposta

4

Non sono sicuro di uTorrent ma questo suona proprio come il nuovo IFileDialog di Vista con il set di opzioni FOS_PICKFOLDERS. Generico C# codice per esso sarebbe andato qualcosa di simile:

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); 
} 

codice completo può essere trovato here.

0

Vedere this answer per leetNightShade per una soluzione di lavoro.

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

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

    Non c'è una licenza in quanto tale è libero di prendere e fare con il codice quello che vuoi.

Scarica il codice here.

0

WindowsAPICodePack

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