Tengo este código, ¿cómo puedo permitir que acepte todos los formatos de imagen típicos? PNG, JPEG, JPG, GIF?
Esto es lo que tengo hasta ahora:
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 el filtro está configurado en archivos .txt. Yo podría cambiar a PNG, pero lo de los otros tipos?
c#
winforms
openfiledialog
Sergio Tapia
fuente
fuente
Aquí hay un ejemplo de la sugerencia ImageCodecInfo (en VB):
Y se ve así:
fuente
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, sí. VB, a veces te extrañoLa solución completa en C # está aquí:
fuente
Para filtrar archivos de imágenes, use este ejemplo de código.
fuente
Me gusta la respuesta de Tom Faust mejor. Aquí hay una versión C # de su solución, pero simplificando un poco las cosas.
fuente
Para las imágenes, puede obtener los códecs disponibles de GDI (System.Drawing) y construir su lista a partir de eso con un poco de trabajo. Esta sería la forma más flexible de hacerlo.
fuente
var imageExtensions = string.Join(";", ImageCodecInfo.GetImageDecoders().Select(ici => ici.FilenameExtension));
dialog.Filter = string.Format("Images|{0}|All Files|*.*", imageExtensions);
Solo un comentario negativo para usar string.Join y LINQ.
fuente
Para aquellos que no quieren recordar la sintaxis cada vez, aquí hay una simple encapsulación:
Uso:
fuente
Para hacer coincidir una lista de diferentes categorías de archivos, puede usar el filtro de esta manera:
fuente
Esto es extremo, pero construí un filtro dinámico basado en una base de datos usando una tabla de base de datos de 2 columnas llamada FILE_TYPES, con los nombres de campo EXTENSION y DOCTYPE:
Obviamente tenía muchos tipos y extensiones diferentes, pero lo estoy simplificando para este ejemplo. Aquí está mi función:
Debería producir un filtro que se vea así:
fuente
Filter="Document files (*.doc,*.docx,*.pdf)|*.doc;*.docx,*.pdf|Image files (*.bmp,*.jpg)|*.bmp;*.jpg";
y esto debería producir un filtro que se parece a la última imagen en la respuesta anterior.DataLayer.Get_DataTable()
que tomaría los comandos SQL que tengo en este código y le devolvería una DataTable, haría todo por usted. Como dije, sí, fue extremo, pero funciona.foreach
bucle en el medio. Es posible que tenga TONELADAS de diferentes tipos de documentos y extensiones dentro de ellos. Esto sirvió como una forma de organizarlos, luego aplicar código para obtenerlos. Para mí, fue mejor que simplemente asumir que solo había 3 de cada uno y dar la cadena de concatenación. Enseñar a un hombre a pescar ....