Saya memiliki kode ini, bagaimana saya bisa mengizinkannya menerima semua format gambar khas? PNG, JPEG, JPG, GIF?
Inilah yang saya miliki sejauh ini:
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. :)
}
}
Perhatikan bahwa filter diatur ke file .txt. Saya bisa berubah menjadi PNG, tetapi bagaimana dengan tipe lainnya?
c#
winforms
openfiledialog
Sergio Tapia
sumber
sumber
Berikut adalah contoh saran ImageCodecInfo (dalam VB):
Dan terlihat seperti ini:
sumber
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 iya. VB, aku terkadang merindukanmuSolusi lengkap dalam C # ada di sini:
sumber
Untuk memfilter file gambar, gunakan contoh kode ini.
sumber
Saya suka jawaban Tom Faust yang terbaik. Ini adalah versi C # dari solusinya, tetapi menyederhanakan banyak hal.
sumber
Untuk gambar, Anda bisa mendapatkan codec yang tersedia dari GDI (System.Drawing) dan membuat daftar dari itu dengan sedikit kerja. Ini akan menjadi cara yang paling fleksibel untuk dilakukan.
sumber
var imageExtensions = string.Join(";", ImageCodecInfo.GetImageDecoders().Select(ici => ici.FilenameExtension));
dialog.Filter = string.Format("Images|{0}|All Files|*.*", imageExtensions);
Hanya perlu untuk menggunakan string.Join dan LINQ.
sumber
Bagi mereka yang tidak ingin mengingat sintaks setiap kali di sini adalah enkapsulasi sederhana:
Pemakaian:
sumber
Untuk mencocokkan daftar kategori file yang berbeda, Anda dapat menggunakan filter seperti ini:
sumber
Ini ekstrem, tetapi saya membangun filter dinamis yang digerakkan oleh database menggunakan tabel database 2 kolom bernama FILE_TYPES, dengan nama bidang EXTENSION dan DOCTYPE:
Jelas saya memiliki banyak jenis dan ekstensi yang berbeda, tetapi saya menyederhanakannya untuk contoh ini. Inilah fungsi saya:
Haruskah menghasilkan filter yang terlihat seperti ini:
sumber
Filter="Document files (*.doc,*.docx,*.pdf)|*.doc;*.docx,*.pdf|Image files (*.bmp,*.jpg)|*.bmp;*.jpg";
dan ini akan menghasilkan filter yang terlihat seperti gambar terakhir dalam jawaban di atas.DataLayer.Get_DataTable()
yang akan mengambil perintah SQL yang saya miliki dalam kode ini & mengirim Anda kembali DataTable, itu akan melakukan segalanya untuk Anda. Seperti yang saya katakan, ya, itu ekstrem, tetapi itu berhasil.foreach
loop itu di tengah. Anda mungkin memiliki BANYAK dokumen yang berbeda, dan ekstensi di dalamnya. Ini berfungsi sebagai cara untuk mengaturnya, kemudian menerapkan kode untuk mendapatkannya. Bagi saya, itu lebih baik daripada hanya mengasumsikan hanya ada masing-masing 3 dan memberikan string gabungan. Ajari pria memancing ....