Eu tenho esse código, como posso aceitar todos os formatos de imagem típicos? PNG, JPEG, JPG, GIF?
Aqui está o que eu tenho até agora:
public void EncryptFile()
{
OpenFileDialog dialog = new OpenFileDialog();
dialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
dialog.InitialDirectory = @"C:\";
dialog.Title = "Please select an image file to encrypt.";
if (dialog.ShowDialog() == DialogResult.OK)
{
//Encrypt the selected file. I'll do this later. :)
}
}
Observe que o filtro está definido para arquivos .txt. Eu poderia mudar para PNG, mas e os outros tipos?
c#
winforms
openfiledialog
Sergio Tapia
fonte
fonte
Aqui está um exemplo da sugestão ImageCodecInfo (no VB):
E fica assim:
fonte
Dim ofd As New OpenFileDialog() With {.Filter = ImageCodecInfo.GetImageEncoders().Aggregate("All Files (*.*)|*.*", Function(s, c) $"{s}|{c.CodecName.Substring(8).Replace("Codec", "Files").Trim()} ({c.FilenameExtension})|{c.FilenameExtension}")}
Ah sim. VB, às vezes sinto sua faltaA solução completa em C # está aqui:
fonte
Para filtrar arquivos de imagens, use este exemplo de código.
fonte
Eu gosto da resposta de Tom Faust da melhor maneira. Aqui está uma versão em C # de sua solução, mas simplificando um pouco as coisas.
fonte
Para imagens, você pode obter os codecs disponíveis no GDI (System.Drawing) e criar sua lista com um pouco de trabalho. Este seria o caminho mais flexível a seguir.
fonte
var imageExtensions = string.Join(";", ImageCodecInfo.GetImageDecoders().Select(ici => ici.FilenameExtension));
dialog.Filter = string.Format("Images|{0}|All Files|*.*", imageExtensions);
Apenas um necrocomment para usar string.Join e LINQ.
fonte
Para quem não quer se lembrar da sintaxe toda vez, aqui está um encapsulamento simples:
Uso:
fonte
Para corresponder a uma lista de diferentes categorias de arquivo, você pode usar o filtro assim:
fonte
Isso é extremo, mas criei um filtro dinâmico orientado a banco de dados usando uma tabela de banco de dados de 2 colunas denominada FILE_TYPES, com os nomes de campo EXTENSION e DOCTYPE:
Obviamente, eu tinha muitos tipos e extensões diferentes, mas estou simplificando para este exemplo. Aqui está a minha função:
Deve gerar um filtro parecido com este:
fonte
Filter="Document files (*.doc,*.docx,*.pdf)|*.doc;*.docx,*.pdf|Image files (*.bmp,*.jpg)|*.bmp;*.jpg";
e isso deve gerar um filtro parecido com a última imagem na resposta acima.DataLayer.Get_DataTable()
que pegaria os comandos SQL que eu tenho neste código e lhe enviaria uma DataTable, ela faria tudo por você. Como eu disse, sim, foi extremo, mas funciona.foreach
loop no meio. Você pode ter toneladas de diferentes tipos de documento e extensões dentro deles. Isso serviu como uma maneira de organizá-los e, em seguida, aplique o código para obtê-los. Para mim, era melhor do que apenas supor que havia apenas 3 de cada e fornecer a seqüência de concatenação. Ensine um homem a peixes ....