เปิดกล่องโต้ตอบไฟล์และเลือกไฟล์โดยใช้การควบคุม WPF และ C #


189

ฉันมีTextBoxชื่อtextbox1และชื่อButton button1เมื่อฉันคลิกที่button1ฉันต้องการเรียกดูไฟล์ของฉันเพื่อค้นหาไฟล์ภาพเท่านั้น (พิมพ์ jpg, png, bmp ... ) และเมื่อฉันเลือกไฟล์รูปภาพและคลิกตกลงในกล่องโต้ตอบไฟล์ฉันต้องการให้ไดเรกทอรีไฟล์ถูกเขียนในtextbox1.textลักษณะนี้:

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

คำตอบ:


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)
eflles

2
@ กำหนดคุณค่าที่ทางของคุณให้ไว้กับรหัสตัวอย่างอย่างเป็นทางการที่msdn.microsoft.com/en-us/library/… ?
Dirk Bester

5
@eflles ตัวอย่างถูกต้องทางเทคนิค จากmsdn.microsoft.com/en-us/library/2cf62fcy.aspx : เมื่อคุณทำการเปรียบเทียบกับชนิดที่มีค่าเป็นโมฆะหากค่าของประเภทที่เป็นค่าที่ไม่มีค่าชนิดใดค่าหนึ่งเป็นค่าโมฆะและค่าชนิดอื่นไม่ใช่การเปรียบเทียบทั้งหมดจะประเมินค่าเป็นเท็จยกเว้น! = (ไม่เท่ากัน) อย่างไรก็ตามฉันคิดว่ามันอาจจะเป็นที่ถกเถียงกันอยู่ว่านี่เป็นการใช้ประโยชน์จากเทคนิคนี้หรือไม่ (โดยส่วนตัวฉันคิดว่ามันใช้ได้ในกรณีนี้)
Ohad Schneider

1
@ แน่นอนว่า! เพียงอัปเดตคุณสมบัติที่ผูกไว้กับกล่องข้อความใน XAML เช่นthis.FileName = filename
Ohad Schneider

1
@sproketboy ฉันต้องยอมรับความสับสนอย่างสมบูรณ์ว่าคุณหมายถึงอะไรโดย "แอพพลิเคชั่นเดสก์ท็อป 64 บิต"; คุณช่วยอธิบายเพิ่มเติมได้ไหม ความเข้าใจของฉันคือMicrosoft.Win32ห้องสมุดเป็น API ที่มีการจัดการกับระบบปฏิบัติการพื้นฐาน วิธีที่พวกเขาพูดคุยกับระบบปฏิบัติการไม่ควรกังวลกับส่วนที่เหลือของแอปพลิเคชันของฉัน (x64 64 บิต) และ 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;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.