222 votes

Définir le filtre sur un OpenFileDialog pour permettre les formats d'image typiques?

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 les fichiers .txt. Je pourrais changer pour PNG, mais qu'en est-il des autres types?

Merci beaucoup!

Modifier:

Je le trouve, voici comment vous le faites:

 dialog.Filter = "JPEG Files (*.jpeg)|*.jpeg|PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif";
 

279voto

itowlson Points 44174

À partir des documents , la syntaxe de filtre dont vous avez besoin est la suivante:

 Office Files|*.doc;*.xls;*.ppt
 

c'est-à-dire séparer les extensions multiples par un point-virgule - donc, Image Files|*.jpg;*.jpeg;*.png;... .

170voto

Devam Mehta Points 411

Suivez ce modèle si vous recherchez des fichiers image:

 dialog.Filter =  "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";
 

68voto

Tom Faust Points 465

Voici un exemple de la suggestion ImageCodecInfo (en VB):

         Dim ofd as new OpenFileDialog()
        ofd.Filter = ""
        Dim codecs As ImageCodecInfo() = ImageCodecInfo.GetImageEncoders()
        Dim sep As String = String.Empty
        For Each c As ImageCodecInfo In codecs
            Dim codecName As String = c.CodecName.Substring(8).Replace("Codec", "Files").Trim()
            ofd.Filter = String.Format("{0}{1}{2} ({3})|{3}", ofd.Filter, sep, codecName, c.FilenameExtension)
            sep = "|"
        Next
        ofd.Filter = String.Format("{0}{1}{2} ({3})|{3}", ofd.Filter, sep, "All Files", "*.*")
 

Et ça ressemble à ça:

entrer la description de l'image ici

45voto

Clark Kent Points 5845

La solution complète en C # est ici:

 private void btnSelectImage_Click(object sender, RoutedEventArgs e)
{
    // Configure open file dialog box 
    Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
    dlg.Filter = "";

    ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
    string sep = string.Empty;

    foreach (var c in codecs)
    {
       string codecName = c.CodecName.Substring(8).Replace("Codec", "Files").Trim();
       dlg.Filter = String.Format("{0}{1}{2} ({3})|{3}", dlg.Filter, sep, codecName, c.FilenameExtension);
       sep = "|";
    }

    dlg.Filter = String.Format("{0}{1}{2} ({3})|{3}", dlg.Filter, sep, "All Files", "*.*"); 

    dlg.DefaultExt = ".png"; // Default file extension 

    // Show open file dialog box 
    Nullable<bool> result = dlg.ShowDialog();

    // Process open file dialog box results 
    if (result == true)
    {
       // Open document 
       string fileName  = dlg.FileName;
       // Do something with fileName  
    }
} 
 

9voto

Muad'Dib Points 14260

Pour les images, vous pouvez obtenir les codecs disponibles auprès de GDI (System.Drawing) et créer votre liste à partir de cela avec un peu de travail. Ce serait le moyen le plus flexible de procéder.

 ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X