Mam ten kod. Jak mogę pozwolić, aby akceptował wszystkie typowe formaty obrazów? PNG, JPEG, JPG, GIF?
Oto co mam do tej pory:
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. :)
}
}
Zauważ, że filtr ustawiony jest na pliki .txt. I mogłaby zmienić PNG, ale co z innymi typami?
c#
winforms
openfiledialog
Sergio Tapia
źródło
źródło
Oto przykład sugestii ImageCodecInfo (w VB):
I wygląda to tak:
źródło
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}")}
O tak. VB, czasami za tobą tęsknięKompletne rozwiązanie w C # jest tutaj:
źródło
Aby filtrować pliki obrazów, użyj tego przykładu kodu.
źródło
Najbardziej podoba mi się odpowiedź Toma Fausta. Oto jego rozwiązanie w wersji C #, ale nieco upraszczające.
źródło
W przypadku obrazów możesz pobrać dostępne kodeki z GDI (System.Drawing) i zbudować z tego swoją listę przy odrobinie pracy. To byłby najbardziej elastyczny sposób.
źródło
var imageExtensions = string.Join(";", ImageCodecInfo.GetImageDecoders().Select(ici => ici.FilenameExtension));
dialog.Filter = string.Format("Images|{0}|All Files|*.*", imageExtensions);
Po prostu nekrolog za używanie string.Join i LINQ.
źródło
Dla tych, którzy nie chcą pamiętać składni za każdym razem, dostępna jest prosta enkapsulacja:
Stosowanie:
źródło
Aby dopasować listę różnych kategorii plików, możesz użyć takiego filtra:
źródło
Jest to ekstremalne, ale zbudowałem dynamiczny, oparty na bazie danych filtr, używając 2-kolumnowej tabeli bazy danych o nazwie FILE_TYPES, z nazwami pól EXTENSION i DOCTYPE:
Oczywiście miałem wiele różnych typów i rozszerzeń, ale upraszczam to w tym przykładzie. Oto moja funkcja:
Powinien dać filtr, który wygląda następująco:
źródło
Filter="Document files (*.doc,*.docx,*.pdf)|*.doc;*.docx,*.pdf|Image files (*.bmp,*.jpg)|*.bmp;*.jpg";
i powinno to dać filtr, który wygląda jak ostatni obrazek w powyższej odpowiedzi.DataLayer.Get_DataTable()
, która pobierze polecenia SQL, które mam w tym kodzie i odeśle ci DataTable, zrobi to wszystko za Ciebie. Tak jak powiedziałem, tak, był ekstremalny, ale działa.foreach
pętli w środku. Możesz mieć TONY różnych rodzajów dokumentów i ich rozszerzenia. Służyło to jako sposób na ich uporządkowanie, a następnie zastosowanie kodu w celu ich uzyskania. Dla mnie było to lepsze niż zakładanie tylko 3 z nich i podawanie łańcucha konkatenacji. Naucz człowieka łowić ryby ...