Domanda

C'è un modo per modificare il comportamento del OpenFileDialog in modo che guarda dentro i file nella cartella si apre per poi ignora quelli determinati in base al loro contenuto?

Un esempio potrebbe essere quello di aprire una cartella piena di file Zip, ma mostrare solo quelli che contengono un certo file.

Dalla documentazione, c'è il HookProc, ma io non sono esattamente sicuro di come lo userei.

Si prega di notare che, se è possibile, mi rendo conto che sarà un'operazione relativamente lenta. Al momento io non sono preoccupato per le prestazioni.

Grazie!

È stato utile?

Soluzione

Non vorrei respingere la complessità della OpenFileDialog. Non è così facile costruire uno che funziona davvero. Quando non costruire il proprio, non è la finestra di dialogo "normale" e di conseguenza confonde gli utenti. Questo è vero anche se lo si fa bene, che è difficile. Quindi io suggerirei di attenersi a estendere ciò che già esiste, piuttosto che scrivere qualcosa di nuovo.

questo articolo per un estensione di OFD che potrebbe / potrebbe essere ottimizzato per fare esattamente quello che vuoi. C'è un callback che si scrive in C # che risponde al percorso di selezione.

Related: FolderBrowserDialogEx è un'estensione simile su FolderBrowserDialog. Nonostante il nome, è possibile configurarlo per cercare i file, così come le cartelle. C'è un callback che viene richiamato quando si seleziona qualcosa (una cartella, un file), e all'interno di tale richiamata si può fare quello che devi fare. Ad esempio, sbirciare all'interno dei file all'interno di una cartella e compilare l'elenco dei file da visualizzare con solo i file.


Un'altra opzione si potrebbe prendere in considerazione è il dialogo libreria dal Ookii . Questa è un'implementazione open source del OpenFileDialog, e include wrapper COM per tutte le novità finestra di dialogo in Vista. Usando questa libreria è possibile pop un Vista OpenFileDialog e ricevere gli eventi dal IFileDialogEvents interfaccia, in codice C #. Uno di questi eventi è OnFolderChange (). All'interno del gestore si potrebbe chiamare IFolder.GetFolder () che vi porterà un IShellItem , che vi dà la cartella l'utente sta cambiando a. Il passo successivo sarebbe quello di dettagliare e potenzialmente filtrare l'insieme di file, il che è un esercizio Lascerò al lettore ...

Altri suggerimenti

No, sarebbe necessario implementare le proprie funzionalità per questo. Ma ad essere onesti, l'OpenFileDialog in realtà non fa un bel po 'in ogni caso. Per essere onesti, sì, probabilmente si potrebbe collegare in esso, ma si sarebbe fare un sacco di lavoro per niente, quando il vero lavoro è quello di ispezionare il contenuto dei file e quindi si può scrivere il proprio semplice classe OpenFileDialog in cima che.

Si può trovare questa domanda utili per quanto riguarda vendita di contenuti dei file zip:

Come elencare il contenuto di una cartella .zip in C #?

(si noti, si potrebbe infilare a migliorare le prestazioni, solo che non estendersi molti fili)

Probabilmente si può utilizzare l'API Codice Pack di Windows (viene fornito con la fonte). La caratteristica comune le finestre di dialogo di file espone molto di più funzionalità di finestre di dialogo file delle versioni in WinForms / WPF.

http://code.msdn.microsoft.com/WindowsAPICodePack

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top