Mở hộp thoại tệp và chọn tệp bằng điều khiển WPF và C #


189

Tôi có một cái TextBoxtên textbox1và một cái Buttontên button1. Khi tôi nhấp vào, button1tôi muốn duyệt các tệp của mình để chỉ tìm kiếm các tệp hình ảnh (gõ jpg, png, bmp ...). Và khi tôi chọn một tệp hình ảnh và bấm Ok trong hộp thoại tệp, tôi muốn thư mục tệp được viết textbox1.textnhư sau:

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

Câu trả lời:


439

Một cái gì đó như thế nên là những gì bạn cần

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) thay vì if (result == true)
eflles

2
@efles giá trị theo cách của bạn cung cấp qua mã mẫu chính thức tại msdn.microsoft.com/en-us/l Library / .
Dirk Bester

5
@eflles Mẫu đúng về mặt kỹ thuật. Từ msdn.microsoft.com/en-us/l Library / 2cf62fcy.aspx : Khi bạn thực hiện so sánh với các loại nullable, nếu giá trị của một trong các loại nullable là null và loại kia thì không, tất cả các so sánh đều đánh giá là sai ngoại trừ! = (không bằng nhau). Tuy nhiên tôi cho rằng có thể tranh cãi liệu đây có phải là một sự khai thác về tính kỹ thuật này hay không (cá nhân tôi nghĩ rằng nó ổn trong trường hợp này).
Ohad Schneider

1
@Terribad tất nhiên rồi! Đơn giản chỉ cần cập nhật các tài sản đó là ràng buộc để các textbox trong XAML, ví dụ:this.FileName = filename
Ohad Schneider

1
@sproketboy Tôi phải thú nhận hoàn toàn nhầm lẫn về ý của bạn đối với "ứng dụng máy tính để bàn 64 bit thuần túy"; bạn có thể giải thích thêm? Hiểu biết của tôi là các Microsoft.Win32thư viện là một API được quản lý cho HĐH cơ bản; Làm thế nào họ nói chuyện với HĐH không phải là vấn đề đáng lo ngại đối với phần còn lại của ứng dụng (x64 64 bit) của tôi và bản thân các API hệ điều hành chỉ được gọi là 'blah32' vì lý do cũ.
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;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.