Pergunta

Existe uma maneira de modificar o comportamento do OpenFileDialog para que fique dentro dos arquivos na pasta que se abre para e, em seguida, ignora certas pessoas com base em seu conteúdo?

Um exemplo seria a abertura para uma pasta cheia de arquivos zip, mas apenas mostrar os que contêm um determinado arquivo.

A partir da documentação, há o HookProc mas eu não sei exatamente como eu usá-lo.

Por favor, note que, se é possível, eu percebo que vai ser uma operação relativamente lenta. No momento eu não estou preocupado com o desempenho.

Obrigado!

Foi útil?

Solução

Eu não descartar a complexidade do OpenFileDialog. Não é tão fácil de construir um que realmente funciona. Quando você construir a sua própria, não é o diálogo "normal" e como resultado ele confunde os usuários. Isto é verdadeiro mesmo se você fizer isso bem, o que é difícil. Então eu sugiro que você furar a estender o que já está lá, ao invés de escrever algo novo.

Verifique este artigo para uma extensão de OFD que o poder / poderia ser tweaked para fazer exatamente o que você quer. Há um callback que você escrever em C # que responde a seleção de caminho.

relacionadas: FolderBrowserDialogEx é uma extensão semelhante sobre FolderBrowserDialog. Apesar do nome, você pode configurá-lo para procurar por arquivos, bem como pastas. Há um callback que é invocado quando algo (uma pasta, um arquivo) está selecionada e dentro desse retorno de chamada que você pode fazer o que você precisa fazer. Por exemplo, auge dentro dos arquivos dentro de uma pasta e preencher a lista de arquivos para exibição com apenas os arquivos.


Outra opção que você pode considerar é o href="http://www.ookii.org/software/dialogs/" rel="nofollow noreferrer"> biblioteca . Esta é uma implementação open source do OpenFileDialog, e inclui invólucros COM para todo o material novo diálogo no Vista. Usando essa biblioteca você pode estalar um OpenFileDialog Vista e receber eventos do IFileDialogEvents interface, em código C #. Um desses eventos é OnFolderChange (). Dentro do manipulador que você poderia chamar IFolder.GetFolder () que vai chegar um IShellItem , que lhe dá a pasta o usuário está mudando para. O próximo passo seria a itemize e potencialmente filtrar o conjunto de arquivos, que é um exercício que vai deixar para o leitor ...

Outras dicas

Não, você teria que implementar sua própria funcionalidade para isso. Mas para ser honesto, o OpenFileDialog realmente não fazer muito de qualquer maneira. Para ser honesto, sim, você provavelmente poderia ligar para ele, mas você estaria fazendo um monte de trabalho para nada quando o verdadeiro trabalho é inspecionar o conteúdo dos arquivos e, em seguida, você pode escrever sua própria classe simples OpenFileDialog no topo do isso.

Você pode encontrar esta pergunta útil a respeito de listagem conteúdo de arquivos zip:

Como listar o conteúdo de um .zip pasta no c #?

(Note, você poderia passe-o para melhorar o desempenho, simplesmente não abrangem muitos tópicos)

Você provavelmente pode usar a API Código Pacote do Windows (vem com a fonte). Os diálogos de arquivos comuns apresentam expõe muito mais funcionalidade de diálogos de arquivo do que as versões em WinForms / WPF.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top