Öffnen Sie den Dateidialog und wählen Sie eine Datei mit WPF-Steuerelementen und C # aus

189

Ich habe einen TextBoxNamen textbox1und einen ButtonNamen button1. Wenn ich auf button1klicke, möchte ich meine Dateien durchsuchen, um nur nach Bilddateien zu suchen (geben Sie jpg, png, bmp ...) ein. Und wenn ich eine Bilddatei auswähle und im Dateidialog auf OK klicke, soll das Dateiverzeichnis wie folgt geschrieben werden textbox1.text:

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

Antworten:

439

So etwas sollte das sein, was Sie brauchen

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
quelle
20
if (result.HasValue && result.Value) statt if (result == true)
eflles
2
@efles Welchen Wert bietet Ihr Weg gegenüber dem offiziellen Beispielcode unter msdn.microsoft.com/en-us/library/… ?
Dirk Bester
5
@eflles Das Beispiel ist technisch korrekt. Von msdn.microsoft.com/en-us/library/2cf62fcy.aspx : Wenn Sie Vergleiche mit nullbaren Typen durchführen und der Wert eines der nullbaren Typen null ist und der andere nicht, werden alle Vergleiche mit Ausnahme von falsch bewertet! = (ungleich). Ich nehme jedoch an, es könnte argumentiert werden, ob dies eine Ausnutzung dieser Technik ist (ich persönlich denke, dass es in diesem Fall in Ordnung ist).
Ohad Schneider
1
@ Ferribad natürlich! Einfach das Objekt aktualisieren , die in das Textfeld in der XAML, zB gebunden sindthis.FileName = filename
Ohad Schneider
1
@sproketboy Ich muss völlige Verwirrung darüber gestehen, was Sie unter einer "reinen 64-Bit-Desktop-Anwendung" verstehen. Könntest du das weiter erklären? Nach meinem Verständnis sind die Microsoft.Win32Bibliotheken eine verwaltete API für das zugrunde liegende Betriebssystem. Wie sie mit dem Betriebssystem kommunizieren, sollte für den Rest meiner (x64 64bit) Anwendung keine Rolle spielen, und die Betriebssystem-APIs selbst werden aus früheren Gründen nur als "blah32" bezeichnet.
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
quelle