打开文件对话框,然后使用WPF控件和C#选择文件


189

我有一个TextBox名字textbox1和一个Button名字button1。当我单击时,button1我想浏览我的文件以仅搜索图像文件(键入jpg,png,bmp ...)。当我选择一个图像文件并在文件对话框中单击“确定”时,我希望这样写入文件目录textbox1.text

textbox1.Text = "C:\myfolder\myimage.jpg"

Answers:


440

那样的东西应该是您所需要的

private void button1_Click(object sender, RoutedEventArgs e)
{
    // Create OpenFileDialog 
    Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();



    // Set filter for file extension and default file extension 
    dlg.DefaultExt = ".png";
    dlg.Filter = "JPEG Files (*.jpeg)|*.jpeg|PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif"; 


    // Display OpenFileDialog by calling ShowDialog method 
    Nullable<bool> result = dlg.ShowDialog();


    // Get the selected file name and display in a TextBox 
    if (result == true)
    {
        // Open document 
        string filename = dlg.FileName;
        textBox1.Text = filename;
    }
}

20
if(result.HasValue && result.Value)而不是if(result == true)
2014年

2
@efles通过msdn.microsoft.com/en-us/library/…的官方示例代码提供的价值是什么?
Dirk Bester

5
@eflles该样本在技术上是正确的。来自msdn.microsoft.com/zh-cn/library/2cf62fcy.aspx当您对可为空的类型执行比较时,如果其中一个可为空的类型的值为null,而另一个为非可空类型,则所有比较的评估结果均为false(除! =(不等于)。但是我想可以争论这是否是对这种技术的利用(我个人认为在这种情况下还可以)。
Ohad Schneider 2014年

1
@Terribad当然!只需更新绑定到XAML中文本框的属性,例如this.FileName = filename
Ohad Schneider 2014年

1
@sproketboy我必须完全承认您对“纯64位桌面应用程序”的含义感到困惑;你能进一步解释吗?我的理解是,Microsoft.Win32库是基础操作系统的托管API。他们与OS的通信方式与我的其他(x64 64位)应用程序无关,并且OS API本身由于传统原因仅被称为“ blah32”。
VisualMelon

23
var ofd = new Microsoft.Win32.OpenFileDialog() {Filter = "JPEG Files (*.jpeg)|*.jpeg|PNG Files (*.png)|*.png|JPG Files (*.jpg)|*.jpg|GIF Files (*.gif)|*.gif"}; 
var result = ofd.ShowDialog();
if (result == false) return;
textBox1.Text = ofd.FileName;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.