2009-06-01 15 views
7

C'è un modo per modificare il comportamento di OpenFileDialog in modo che guardi dentro i file nella cartella in cui si apre e poi ignori determinati in base al loro contenuto?Filtraggio dei file visualizzati in OpenFileDialog in base al contenuto?

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

Dalla documentazione, c'è il HookProc ma 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 non sono preoccupato per le prestazioni.

Grazie!

risposta

3

Non eliminerei la complessità di OpenFileDialog. Non è così facile crearne uno che funzioni davvero. Quando si crea il proprio, non è la finestra di dialogo "normale" e di conseguenza confonde gli utenti. Questo è vero anche se lo fai bene, il che è difficile. Quindi ti suggerisco di attenersi all'estensione di ciò che è già lì, piuttosto che scrivere qualcosa di nuovo.

Controllare this article for an extension of OFD che potrebbe/potrebbe essere modificato per fare esattamente quello che vuoi. C'è una callback che scrivi in ​​C# che risponde alla selezione del percorso.

Correlato: FolderBrowserDialogEx è un'estensione simile su FolderBrowserDialog. Nonostante il nome, è possibile configurarlo per cercare file e cartelle. C'è un callback che viene richiamato quando qualcosa (una cartella, un file) è selezionato, e all'interno di quel callback puoi fare ciò che devi fare. Ad esempio, guarda all'interno dei file all'interno di una cartella e compila l'elenco dei file da visualizzare con solo quei file.


Un'altra opzione si potrebbe prendere in considerazione è il dialog library from Ookii. Questa è un'implementazione open source di OpenFileDialog e include i wrapper COM per tutte le nuove funzionalità di dialogo in Vista. Usando questa libreria puoi aprire Vista OpenFileDialog e ricevere eventi dall'interfaccia IFileDialogEvents, nel codice C#. Uno di questi eventi è OnFolderChange(). All'interno del gestore è possibile chiamare IFolder.GetFolder() che consente di ottenere un IShellItem, che fornisce la cartella in cui l'utente sta cambiando. Il prossimo passo sarebbe quello di catalogare e potenzialmente filtrare il set di file, che è un esercizio che lascerò al lettore ...

+0

interessante! Lo controllerò domani. Grazie! – djcouchycouch

1

No, dovresti implementare la tua funzionalità per quello. Ma ad essere onesti, OpenFileDialog non fa comunque molto. Per essere onesti, sì, probabilmente potresti farlo, ma faresti molto lavoro per niente quando il vero lavoro è quello di ispezionare il contenuto dei file e poi puoi scrivere la tua semplice classe OpenFileDialog sopra quella.

Si potrebbe trovare questa domanda utili per quanto riguarda il contenuto elenco dei file zip:

How to list the contents of a .zip folder in c#?

(nota, si potrebbe infilare per migliorare le prestazioni, solo che non estendersi molti fili)

0

Probabilmente si può usare il pacchetto di codice API di Windows (fornito con l'origine). La funzione di dialogo File comuni espone molto più funzionalità delle finestre di dialogo dei file rispetto alle versioni in Winforms/WPF.

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

Problemi correlati