Ouvrez la boîte de dialogue de fichier et sélectionnez un fichier à l'aide des contrôles WPF et C #

189

J'ai un TextBoxnommé textbox1et un Buttonnommé button1. Lorsque je clique sur button1je veux parcourir mes fichiers pour rechercher uniquement les fichiers image (type jpg, png, bmp ...). Et lorsque je sélectionne un fichier image et que je clique sur Ok dans la boîte de dialogue de fichier, je veux que le répertoire de fichiers soit écrit textbox1.textcomme suit:

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

Réponses:

440

Quelque chose comme ça devrait être ce dont vous avez besoin

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
la source
20
if (result.HasValue && result.Value) au lieu de if (result == true)
eflles
2
@efles quelle est la valeur que votre chemin fournit par rapport à l'exemple de code officiel sur msdn.microsoft.com/en-us/library/… ?
Dirk Bester
5
@eflles L'échantillon est techniquement correct. À partir de msdn.microsoft.com/en-us/library/2cf62fcy.aspx : lorsque vous effectuez des comparaisons avec des types Nullable, si la valeur de l'un des types Nullable est NULL et que l'autre ne l'est pas, toutes les comparaisons sont évaluées à false sauf pour! = (différent de). Cependant, je suppose que l'on pourrait se demander s'il s'agit d'une exploitation de cette technicité (je pense personnellement que c'est OK dans ce cas).
Ohad Schneider
1
@Terribad bien sûr! Mettez simplement à jour la propriété liée à la zone de texte dans le XAML, par exemplethis.FileName = filename
Ohad Schneider
1
@sproketboy Je dois avouer une confusion totale quant à ce que vous entendez par "pure application de bureau 64 bits"; pourriez-vous expliquer davantage? Je crois comprendre que les Microsoft.Win32bibliothèques sont une API gérée pour le système d'exploitation sous-jacent; la façon dont ils parlent au système d'exploitation ne devrait pas préoccuper le reste de mon application (x64 64 bits), et les API du système d'exploitation elles-mêmes ne sont appelées que «blah32» pour des raisons d'héritage.
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
la source