Domanda

Sto cercando di mettere un filtro sul mio C # OpenFileDialog che esclude determinate estensioni di file. Per esempio io voglio che mostra tutti i file in una directory che non sono file .txt.

C'è un modo per fare questo?

È stato utile?

Soluzione

Non v'è alcun modo diretto per farlo utilizzando il BCL OpenFileDialog.

mi viene in mente un paio di opzioni:

1) Fare un filtro che ha appena tutti i tipi che si vuole sostenere. Questa sarebbe la mia raccomandazione, dato che questo è il modo più comune di andare su questo tipo di operazione.

2) Usa qualcosa lungo le linee di questo personalizzato OpenFileDialog implementazione . È quindi possibile eseguire l'override del metodo OnFileNameChanged () per potenzialmente disattivare il pulsante "Apri" Se il file selezionato ha un'estensione .txt.

3) consentire all'utente di scegliere un file .txt, vomitare un messaggio di errore, e riaprire la finestra di dialogo file. Questo si sente goffo e non troppo grande per me, anche se ....

Altri suggerimenti

Non credo che questo sia possibile. Il modo in cui il filtro è impostato, è che si può scegliere quali file da mostrare, ma non credo ci sia un modo per mostrare "Tutti i file tranne ...". Vieni a pensarci bene, hai mai visto un Apri file finestra di dialogo di Windows che ha questo? Io non credo di aver mai visto uno.

La cosa migliore è quella di far loro scegliere tutti i file, e quindi richiedere all'utente se si seleziona uno che non è consentito o filtrare verso il basso per tutti i possibili file che è possibile affrontare.

Trovato con Google ricerca "OpenFileDialog"

EDIT: Mi dispiace per non espandere sugli aspetti escludere. Potrebbe non essere necessario andare a questo estremo, ma sarebbe soddisfare le vostre esigenze ....

  • Fare una ricerca di directory ricorsiva di tutti i file che l'utente può scegliere. (Speriamo che questo è un piccolo insieme di cartelle.)
  • Unicamente identificare le estensioni su tali file. (System.IO.Path.GetExtension () e Linq di .Distint () metodo può funzionare bene qui)
  • Rimuovere la voce ".txt" dalla lista.
  • creare una stringa filtro scorrendo queste estensioni.

Ho paura che questo non è possibile. Potrete sia necessario

  • a) Includere un lungo elenco di tutte le estensioni che dovrebbe essere consentito, o

  • b) Consentire tutte le estensioni, e quindi utilizzare un semplice controllo in codice che riapre la finestra di dialogo se il file selezionato ha estensione .txt.

Inoltre, potrebbe fornire un po 'di più contesto per questa domanda? Ho problemi che prevede uno scenario in cui potrei esplicitamente bisogno di escludere una determinata estensione. Non si può probabilmente ottenere via con un semplice filtro (e forse un po 'di check-in codice) in quasi tutte le situazioni.

Ecco un approccio completamente diverso, che è improbabile da usare.

Invece di usare OpenFileDialog, analizzare le caratteristiche specifiche avete bisogno e creare il proprio finestra di dialogo. Si potrebbe facilmente fornire qualsiasi filtraggio che vuoi, ma poi la difficoltà si muove verso la realizzazione e il mantenimento della nuova interfaccia utente.

Non suggerisco di fare questo, ma a volte gli utenti sono piuttosto insistenti su ciò di cui hanno bisogno.

Un altro alternativo: Invece di utilizzare una finestra di dialogo, trovare qualcosa di completamente diverso che si adatta bene all'interno della app. Questo potrebbe non essere possibile, ma poi non sappiamo molto circa l'applicazione.

Non è possibile impostare un filtro per Escludi le estensioni da finestre di dialogo file.

Si potrebbe tuttavia implementare un delegato per l'evento FileOk nella finestra di dialogo. Questo evento appena prima che il file sarà accettato l'utente selezionato, e gli argomenti degli eventi forniscono una proprietà Cancel che è possibile impostare di non consentire la selezione.

Non è elegante come fare effettivamente i file errati invisibile, ma vi permetterà di non consentire la selezione del tipo sbagliato di file.

PS:. Non dimenticare di dare il feedback degli utenti perché il file non è stato accettato, altrimenti potrebbero chiedersi perché la finestra di dialogo non si chiude quando prendono un file 'txt'

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