Ser*_*pia 217 c# openfiledialog winforms
我有这个代码,我怎么能让它接受所有典型的图像格式?PNG,JPEG,JPG,GIF?
这是我到目前为止所拥有的:
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. :)
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,过滤器设置为.txt文件.我可以改为PNG,但其他类型呢?
ito*_*son 272
从文档中,您需要的过滤器语法如下:
Office Files|*.doc;*.xls;*.ppt
Run Code Online (Sandbox Code Playgroud)
即用分号分隔多个扩展名 - 因此,Image Files|*.jpg;*.jpeg;*.png;...
.
Dev*_*hta 167
如果您浏览图像文件,请遵循此模式:
dialog.Filter = "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";
Run Code Online (Sandbox Code Playgroud)
小智 68
这是ImageCodecInfo建议的一个例子(在VB中):
Imports System.Drawing.Imaging
...
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", "*.*")
Run Code Online (Sandbox Code Playgroud)
它看起来像这样:
Dev*_*per 44
C#中的完整解决方案在这里:
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
}
}
Run Code Online (Sandbox Code Playgroud)
小智 21
要过滤图像文件,请使用此代码示例.
//Create a new instance of openFileDialog
OpenFileDialog res = new OpenFileDialog();
//Filter
res.Filter = "Image Files|*.jpg;*.jpeg;*.png;*.gif;*.tif;...";
//When the user select the file
if (res.ShowDialog() == DialogResult.OK)
{
//Get the file's path
var filePath = res.FileName;
//Do something
....
}
Run Code Online (Sandbox Code Playgroud)
Nie*_*elW 12
我最喜欢Tom Faust的答案.这是他的解决方案的C#版本,但稍微简化了一些事情.
var codecs = ImageCodecInfo.GetImageEncoders();
var codecFilter = "Image Files|";
foreach (var codec in codecs)
{
codecFilter += codec.FilenameExtension + ";";
}
dialog.Filter = codecFilter;
Run Code Online (Sandbox Code Playgroud)
对于图像,您可以从GDI(System.Drawing)获取可用的编解码器,并通过一些工作来构建您的列表.这将是最灵活的方式.
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
Run Code Online (Sandbox Code Playgroud)
小智 9
只是使用string.Join和LINQ的一个necrocomment.
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
dlgOpenMockImage.Filter = string.Format("{0}| All image files ({1})|{1}|All files|*",
string.Join("|", codecs.Select(codec =>
string.Format("{0} ({1})|{1}", codec.CodecName, codec.FilenameExtension)).ToArray()),
string.Join(";", codecs.Select(codec => codec.FilenameExtension).ToArray()));
Run Code Online (Sandbox Code Playgroud)
写出您的应用程序所需的类型。(参考FileDialog.Filter)。以下是所有最常见的图像格式。
private static string GetImageFilter()
{
return
"All Files (*.*)|*.*" +
"|All Pictures (*.emf;*.wmf;*.jpg;*.jpeg;*.jfif;*.jpe;*.png;*.bmp;*.dib;*.rle;*.gif;*.emz;*.wmz;*.tif;*.tiff;*.svg;*.ico)" +
"|*.emf;*.wmf;*.jpg;*.jpeg;*.jfif;*.jpe;*.png;*.bmp;*.dib;*.rle;*.gif;*.emz;*.wmz;*.tif;*.tiff;*.svg;*.ico" +
"|Windows Enhanced Metafile (*.emf)|*.emf" +
"|Windows Metafile (*.wmf)|*.wmf" +
"|JPEG File Interchange Format (*.jpg;*.jpeg;*.jfif;*.jpe)|*.jpg;*.jpeg;*.jfif;*.jpe" +
"|Portable Network Graphics (*.png)|*.png" +
"|Bitmap Image File (*.bmp;*.dib;*.rle)|*.bmp;*.dib;*.rle" +
"|Compressed Windows Enhanced Metafile (*.emz)|*.emz" +
"|Compressed Windows MetaFile (*.wmz)|*.wmz" +
"|Tag Image File Format (*.tif;*.tiff)|*.tif;*.tiff" +
"|Scalable Vector Graphics (*.svg)|*.svg" +
"|Icon (*.ico)|*.ico";
}
Run Code Online (Sandbox Code Playgroud)
设置FilterIndex = 2
为预选“所有图片”。除非有充分的理由,否则不要设置。openFileDialog.InitialDirectory
void OpenImageFile()
{
var openFileDialog = new OpenFileDialog
{
Filter = GetImageFilter(),
FilterIndex = 2,
RestoreDirectory = true
};
DialogResult result = openFileDialog.ShowDialog();
// do something with your file
// bool resultOk = (result == System.Windows.Forms.DialogResult.OK);
// string filePath = openFileDialog.FileName;
// ...
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
369168 次 |
最近记录: |