J'ai ce code, comment puis-je lui permettre d'accepter tous les formats d'image typiques? PNG, JPEG, JPG, GIF?
Voici ce que j'ai jusqu'à présent:
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. :)
}
}
Notez que le filtre est défini sur des fichiers .txt. Je pourrais changer en PNG, mais qu'en est-il des autres types?
c#
winforms
openfiledialog
Sergio Tapia
la source
la source
Voici un exemple de la suggestion ImageCodecInfo (en VB):
Et cela ressemble à ceci:
la source
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 oui. VB, tu me manques parfoisLa solution complète en C # est ici:
la source
Pour filtrer les fichiers d'images, utilisez cet exemple de code.
la source
J'aime mieux la réponse de Tom Faust. Voici une version C # de sa solution, mais simplifiant un peu les choses.
la source
Pour les images, vous pouvez obtenir les codecs disponibles à partir de GDI (System.Drawing) et construire votre liste à partir de cela avec un peu de travail. Ce serait la façon la plus flexible de procéder.
la source
var imageExtensions = string.Join(";", ImageCodecInfo.GetImageDecoders().Select(ici => ici.FilenameExtension));
dialog.Filter = string.Format("Images|{0}|All Files|*.*", imageExtensions);
Juste un nécrocomment pour utiliser string.Join et LINQ.
la source
Pour ceux qui ne veulent pas se souvenir de la syntaxe à chaque fois, voici une simple encapsulation:
Usage:
la source
Afin de faire correspondre une liste de différentes catégories de fichiers, vous pouvez utiliser le filtre comme ceci:
la source
C'est extrême, mais j'ai construit un filtre dynamique basé sur une base de données en utilisant une table de base de données à 2 colonnes nommée FILE_TYPES, avec les noms de champ EXTENSION et DOCTYPE:
Évidemment, j'avais de nombreux types et extensions différents, mais je le simplifie pour cet exemple. Voici ma fonction:
Devrait produire un filtre qui ressemble à ceci:
la source
Filter="Document files (*.doc,*.docx,*.pdf)|*.doc;*.docx,*.pdf|Image files (*.bmp,*.jpg)|*.bmp;*.jpg";
et cela devrait produire un filtre qui ressemble à la dernière image de la réponse ci-dessus.DataLayer.Get_DataTable()
qui prendrait les commandes SQL que j'ai dans ce code et vous renverrait un DataTable, il ferait tout pour vous. Comme je l'ai dit, oui, c'était extrême, mais ça marche.foreach
boucle au milieu. Vous pouvez avoir des tonnes de doctypes différents et des extensions en leur sein. Cela a servi à les organiser, puis à appliquer du code pour les obtenir. Pour moi, c'était mieux que de simplement supposer qu'il n'y en avait que 3 de chaque et donner la chaîne de concaténation. Apprenez à un homme à pêcher ....