Buka dialog file dan pilih file menggunakan kontrol WPF dan C #

189

Saya memiliki TextBoxnama textbox1dan Buttonnama button1. Ketika saya mengklik button1saya ingin menelusuri file saya untuk mencari hanya file gambar (ketik jpg, png, bmp ...). Dan ketika saya memilih file gambar dan klik Ok di dialog file saya ingin direktori file ditulis textbox1.textseperti ini:

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

Jawaban:

440

Sesuatu seperti itu harus menjadi apa yang Anda butuhkan

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;
    }
}
Klaus78
sumber
20
if (result.HasValue && result.Value) alih-alih if (result == true)
eflles
2
@efles berapa nilai yang Anda berikan di atas kode sampel resmi di msdn.microsoft.com/en-us/library/… ?
Dirk Bester
5
@eflles Sampel secara teknis benar. Dari msdn.microsoft.com/en-us/library/2cf62fcy.aspx : Ketika Anda melakukan perbandingan dengan jenis yang dapat dibatalkan, jika nilai salah satu dari jenis yang dapat dibatalkan adalah nol dan yang lainnya tidak, semua perbandingan akan dinilai salah kecuali untuk! = (tidak sama). Namun saya kira dapat diperdebatkan apakah ini merupakan eksploitasi dari teknis ini (saya pribadi berpikir tidak masalah dalam hal ini).
Ohad Schneider
1
@Tribribad tentu saja! Cukup perbarui properti yang terikat ke kotak teks di XAML, mis.this.FileName = filename
Ohad Schneider
1
@ sproketboy Saya harus mengakui kebingungan lengkap tentang apa yang Anda maksud dengan "aplikasi desktop 64bit murni"; Bisakah Anda jelaskan lebih lanjut? Pemahaman saya adalah Microsoft.Win32perpustakaan adalah API yang dikelola untuk OS yang mendasarinya; bagaimana mereka berbicara dengan OS seharusnya tidak menjadi masalah bagi sisa aplikasi saya (x64 64bit), dan API OS itu sendiri hanya disebut 'blah32' karena alasan warisan.
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;
Dave
sumber