Ich habe diesen Code. Wie kann ich zulassen, dass alle typischen Bildformate akzeptiert werden? PNG, JPEG, JPG, GIF?
Folgendes habe ich bisher:
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. :)
}
}
Beachten Sie, dass der Filter auf TXT-Dateien eingestellt ist. Ich könnte zu PNG wechseln, aber was ist mit den anderen Typen?
c#
winforms
openfiledialog
Sergio Tapia
quelle
quelle
Hier ist ein Beispiel für den ImageCodecInfo-Vorschlag (in VB):
Und es sieht so aus:
quelle
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 ja. VB, ich vermisse dich manchmalDie vollständige Lösung in C # finden Sie hier:
quelle
Verwenden Sie dieses Codebeispiel, um Bilddateien zu filtern.
quelle
Die Antwort von Tom Faust gefällt mir am besten. Hier ist eine C # -Version seiner Lösung, die die Dinge jedoch ein wenig vereinfacht.
quelle
Für Bilder können Sie die verfügbaren Codecs von GDI (System.Drawing) herunterladen und mit ein wenig Arbeit Ihre Liste daraus erstellen. Dies wäre der flexibelste Weg.
quelle
var imageExtensions = string.Join(";", ImageCodecInfo.GetImageDecoders().Select(ici => ici.FilenameExtension));
dialog.Filter = string.Format("Images|{0}|All Files|*.*", imageExtensions);
Nur ein Nekrokommentar für die Verwendung von string.Join und LINQ.
quelle
Für diejenigen, die sich nicht jedes Mal an die Syntax erinnern möchten, ist hier eine einfache Kapselung:
Verwendung:
quelle
Um eine Liste verschiedener Dateikategorien abzugleichen, können Sie den Filter folgendermaßen verwenden:
quelle
Das ist extrem, aber ich habe einen dynamischen, datenbankgesteuerten Filter mit einer zweispaltigen Datenbanktabelle namens FILE_TYPES mit den Feldnamen EXTENSION und DOCTYPE erstellt:
Natürlich hatte ich viele verschiedene Typen und Erweiterungen, aber ich vereinfache es für dieses Beispiel. Hier ist meine Funktion:
Sollte einen Filter ergeben, der so aussieht:
quelle
Filter="Document files (*.doc,*.docx,*.pdf)|*.doc;*.docx,*.pdf|Image files (*.bmp,*.jpg)|*.bmp;*.jpg";
und dies sollte einen Filter ergeben, der wie das letzte Bild in der obigen Antwort aussieht.DataLayer.Get_DataTable()
, die die in diesem Code enthaltenen SQL-Befehle übernimmt und Ihnen eine DataTable zurücksendet, würde sie alles für Sie tun. Wie gesagt, ja, war extrem, aber es funktioniert.foreach
Schleife in der Mitte zu demonstrieren . Möglicherweise haben Sie TONNEN verschiedener Doctypes und Erweiterungen darin. Dies diente dazu, sie zu organisieren und dann Code anzuwenden, um sie zu erhalten. Für mich war es besser, als nur anzunehmen, dass es nur drei von jedem gab und die Verkettungszeichenfolge anzugeben.