Otwórz okno dialogowe pliku i wybierz plik za pomocą kontrolek WPF i C #

189

Mam TextBoxnazwane textbox1i Buttonnazwane button1. Po kliknięciu button1chcę przeglądać moje pliki, aby wyszukiwać tylko pliki graficzne (wpisz jpg, png, bmp ...). A kiedy wybieram plik obrazu i klikam Ok w oknie dialogowym pliku, chcę, aby katalog plików był zapisany w textbox1.textnastępujący sposób:

textbox1.Text = "C:\myfolder\myimage.jpg"
NoobMaster69
źródło

Odpowiedzi:

440

Coś takiego powinno być tym, czego potrzebujesz

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
źródło
20
if (result.HasValue && result.Value) zamiast if (result == true)
eflles
2
@efles, jaką wartość ma twój sposób w stosunku do oficjalnego przykładowego kodu na msdn.microsoft.com/en-us/library/... ?
Dirk Bester
5
@eflles Próbka jest poprawna technicznie. From msdn.microsoft.com/en-us/library/2cf62fcy.aspx : Gdy wykonujesz porównania z typami zerowalnymi, jeśli wartość jednego z typów zerowalnych jest zerowa, a drugiego nie, wszystkie porównania są fałszywe, z wyjątkiem! = (nie równy). Jednak przypuszczam, że można spierać się, czy jest to wykorzystanie tej techniki (osobiście uważam, że w tym przypadku jest OK).
Ohad Schneider
1
@Terribad oczywiście! Po prostu zaktualizuj właściwość powiązaną z polem tekstowym w XAML, np.this.FileName = filename
Ohad Schneider
1
@sproketboy Muszę wyznać całkowite zamieszanie, co rozumiesz przez „czystą 64-bitową aplikację komputerową”; czy mógłbyś wyjaśnić dalej? Rozumiem, że Microsoft.Win32biblioteki są zarządzanym API dla podstawowego systemu operacyjnego; sposób, w jaki rozmawiają z systemem operacyjnym, nie powinien mieć wpływu na resztę mojej aplikacji (64-bitowej x64), a same interfejsy API systemu operacyjnego są nazywane „blah32” tylko ze względów starszych.
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
źródło