Pergunta

Eu estou tentando colocar um filtro no meu C # OpenFileDialog que exclui certas extensões de arquivo. Por exemplo, eu quero isso para mostrar todos os arquivos em um diretório que não são arquivos .txt.

Existe uma maneira de fazer isso?

Foi útil?

Solução

Não há nenhuma maneira direta de fazer isso usando o BCL OpenFileDialog.

Não consigo pensar em um par de opções:

1) Faça um filtro que só tem todos os tipos que você deseja oferecer suporte. Esta seria a minha recomendação, já que é a forma mais comum de ir sobre este tipo de operação.

2) Use algo ao longo das linhas deste costume OpenFileDialog implementação . Você poderia, então, substituir o método OnFileNameChanged () para potencialmente desativar o botão "Abrir" se o arquivo selecionado tem uma extensão .txt.

3) Deixe o usuário escolher um arquivo .txt, jogue-se um diálogo de erro, e reabrir o diálogo de arquivo. Isso sente-se desajeitada e não muito grande para mim, embora ....

Outras dicas

Eu não acho que isso é possível. A forma como o filtro está configurado, é que você pode escolher quais arquivos para mostrar, mas eu não acho que há uma maneira de mostrar "Todos os arquivos, exceto ...". Venha para pensar sobre isso, você já viu um diálogo Abrir arquivo no Windows que tem isso? Eu não acho que eu já vi um.

Sua melhor aposta é a de deixá-los escolher todos os arquivos e, em seguida, alerta o usuário se selecionar um que não é permitido ou filtrá-la para baixo para todos os possíveis arquivos que você pode lidar com eles.

Encontrado com pesquisa do Google "OpenFileDialog"

EDIT: Desculpe por não expandir na aspectos EXCLUIR. Você pode não precisar de ir a esse extremo, mas seria atender às suas necessidades ....

  • Faça uma pesquisa de diretório recursiva de todos os arquivos que o usuário pode escolher. (Esperemos que isso é um pequeno conjunto de pastas.)
  • identificar exclusivamente as extensões sobre esses arquivos. (Da System.IO.Path.GetExtension () e Linq .Distint () método pode funcionar bem aqui)
  • Remova a entrada ".txt" da lista.
  • Construir uma cadeia de filtro por looping através destas extensões.

Eu tenho medo isso não é possível. Você quer vai ter que

  • a) Incluir uma longa lista de todas as extensões que devem ser permitidos, ou

  • b) Permitir todas as extensões, e em seguida, usar uma verificação simples no código que reabre o diálogo se o arquivo selecionado tem extensão .txt.

Além disso, você poderia fornecer um contexto mais bits para esta pergunta? Estou tendo problemas para encarar um cenário onde eu poderia explicitamente precisa excluir uma certa extensão. Você não pode provavelmente começar afastado com apenas um filtro (e talvez um pouco de check-in de código) em quase todas as situações.

Aqui está uma abordagem completamente diferente, o que é improvável que você usar.

Em vez de usar OpenFileDialog, analisar apresenta o específico que você precisa e criar a sua própria caixa de diálogo. Você poderia facilmente fornecer qualquer filtragem que você quer, mas então a dificuldade se move sobre a implementação e manutenção da nova interface do usuário.

Eu não sugiro que você faça isso, mas às vezes os usuários são bastante insistente sobre o que eles precisam.

Outra alternativa: Em vez de usar uma caixa de diálogo, chegar a algo completamente diferente que se encaixa bem dentro do aplicativo. Isto pode não ser possível, mas, em seguida, nós não sabemos muito sobre o aplicativo.

Você não pode definir um filtro para excluir extensões de diálogos de arquivo.

Você poderia, contudo, implementar um delegado para o evento FileOk no diálogo. Este evento é acionado imediatamente antes de o arquivo do usuário selecionado serão aceitos, e os argumentos do evento fornecem uma propriedade Cancel que você pode definir a seleção disallow.

Não é tão elegante quanto realmente fazendo os arquivos errados invisível, mas permitirá que você para não permitir seleção do tipo errado de arquivo.

PS:. Não se esqueça de dar o feedback do usuário por que o arquivo não foi aceita, caso contrário, eles podem se perguntar por que o diálogo não está fechando quando pegar um arquivo 'txt'

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