This article has been localized into French by the community.
L'OpenFileDialog
Dans la plupart des applications Windows, chaque fois que vous ouvrez ou enregistrez un fichier, vous voyez à peu près les mêmes boîtes de dialogue. C'est normal dans la mesure où ces boîtes de dialogue font partie de l'API Windows et sont donc également utilisées par les développeurs d'applications Windows.
Pour WPF, vous trouverez les boîtes de dialogue standard pour l'ouverture et l'enregistrement de fichiers dans l'espace de noms Microsoft.Win32 . Dans cet article, nous allons nous concentrer sur la classe OpenFileDialog , qui permet d'afficher facilement une boîte de dialogue permettant d'ouvrir un ou plusieurs fichiers.
Exemple simple d'utilisation de OpenFileDialog
Commençons par utiliser OpenFileDialog sans aucune option afin de charger le contenu d'un fichier dans un contrôle TextBox :
<Window x:Class="WpfTutorialSamples.Dialogs.OpenFileDialogSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="OpenFileDialogSample" Height="300" Width="300">
<DockPanel Margin="10">
<WrapPanel HorizontalAlignment="Center" DockPanel.Dock="Top" Margin="0,0,0,10">
<Button Name="btnOpenFile" Click="btnOpenFile_Click">Open file</Button>
</WrapPanel>
<TextBox Name="txtEditor" />
</DockPanel>
</Window>
using System;
using System.IO;
using System.Windows;
using Microsoft.Win32;
namespace WpfTutorialSamples.Dialogs
{
public partial class OpenFileDialogSample : Window
{
public OpenFileDialogSample()
{
InitializeComponent();
}
private void btnOpenFile_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if(openFileDialog.ShowDialog() == true)
txtEditor.Text = File.ReadAllText(openFileDialog.FileName);
}
}
}
Dès que vous avez cliqué sur le bouton Ouvrir le fichier, OpenFileDialog sera instancié et affiché. Selon la version de Windows que vous utilisez et le thème sélectionné, le résultat ressemblera à ceci :
ShowDialog () renverra une valeur booléenne qui peut prendre les valeurs false, true ou null. Si l'utilisateur sélectionne un fichier et appuie sur "Ouvrir", le résultat est True et dans ce cas, le contenu du fichier pourra être chargé dans le contrôle TextBox. Le chemin complet du fichier sélectionné sera obtenu en utilisant la propriété FileName de OpenFileDialog.
Filtrage
Normalement, lorsque vous souhaitez que l'utilisateur ouvre un fichier à partir de votre application, vous souhaitez limiter les types de fichiers sélectionnables à un ou deux. Par exemple, Word ouvre habituellement les fichiers dont l'extension est ".doc" ou ".docx" et le Bloc-notes ouvre habituellement les fichiers dont l'extension est ".txt".
Vous pouvez associer un filtre à OpenFileDialog afin de limiter les types de fichiers que l'utilisateur pourra ouvrir à partir de votre application et ainsi avoir un aperçu simplifié. La propriété Filter, que nous pouvons ajouter à l’exemple ci-dessus, juste après l’initialisation du dialogue, permet d'atteindre cet objectif :
openFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
Voici le résultat :
Notez que la boîte de dialogue contient maintenant une liste déroulante pour la sélection des types de fichiers et que la liste des fichiers affichés est limitée à ceux dont l'extension correspond aux extensions sélectionnées.
Le format utilisé pour spécifier le filtre peut paraître un peu étrange à première vue. Il comprend un premier élément facilement compréhensible par un humain puis un deuxième élément plus adapté à une analyse par ordinateur. Ces deux éléments sont séparés par le caractère pipe "|". Si vous souhaitez bâtir un filtre pour sélectionner plusieurs types de fichiers, comme ci-dessus, vous devez ajouter chaque fois les deux éléments en les faisant précéder à nouveau du caractère pipe.
Pour résumer, l'exemple suivant signifie que nous voulons sélectionner uniquement des fichiers Texte. L'extension indiquée entre parenthèses "(* .txt)" est destinée à informer l'utilisateur alors que la deuxième partie "*.txt" indique à la boîte de dialogue de n'afficher que les fichiers dont l'extension est ".txt" :
Text files (*.txt)|*.txt
Chaque type de fichier peut bien entendu avoir plusieurs extensions. Par exemple, les fichiers images (ici Image Files) peuvent comprendre des fichiers dont l'extension est soit JPEG soit PNG. Par exemple :
openFileDialog.Filter = "Image files (*.png;*.jpeg)|*.png;*.jpeg|All files (*.*)|*.*";
Séparez simplement chaque extension par un point-virgule dans la deuxième partie (celle destinée à l'ordinateur) Vous pouvez formater la première partie de l'expression (celle destinée à un humain) comme vous le souhaitez. Cependant la plupart des développeurs semblent utiliser la même notation pour les deux parties de l'expression , comme dans l'exemple ci-dessus.
Définition du répertoire initial
Le répertoire initial utilisé par défaut par OpenFileDialog est déterminé par Windows, mais vous pouvez définir votre propre répertoire initial en utilisant la propriété InitialDirectory . Vous choisirez généralement soit un répertoire désigné par l'utilisateur, soit le répertoire de l'application soit le dernier répertoire utilisé par l'application. Vous trouverez ci-dessous un exemple de répertoire initial sous forme de chaine de caractères :
openFileDialog.InitialDirectory = @"c:\temp\";
Si vous souhaitez utiliser l'un des dossiers spéciaux de Windows (Bureau, documents ou Programmes), vous devez faire particulièrement attention étant donné que les noms de ceux-ci peuvent varier d’une version de Windows à l’autre et dépendent également de l’utilisateur connecté. Le framework .NET peut vous aider en mettant à votre disposition la Classe Environment et ses membres pour traiter ces dossiers spéciaux :
openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
Dans l'exemple ci-dessus nous recevons le chemin du dossier Documents (Mes Documents), mais jetez un coup d’œil à l’énumération SpecialFolder - elle contient les valeurs de nombreux chemins. Pour obtenir une liste complète, consultez cet article MSDN .
Plusieurs fichiers
Si votre application supporte l'ouverture simultanée de plusieurs fichiers ou si vous souhaitez utiliser OpenFileDialog pour sélectionner plusieurs fichiers à la fois, vous devez activer la propriété Multiselect . L'exemple suivant illustre l'utilisation de cette propriété. Par courtoisie, cher lecteur, nous avons également appliqué dans cet exemple tous les techniques mentionnées ci-dessus, y compris le filtrage et la configuration du répertoire initial:
<Window x:Class="WpfTutorialSamples.Dialogs.OpenFileDialogMultipleFilesSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="OpenFileDialogMultipleFilesSample" Height="300" Width="300">
<DockPanel Margin="10">
<WrapPanel HorizontalAlignment="Center" DockPanel.Dock="Top" Margin="0,0,0,10">
<Button Name="btnOpenFile" Click="btnOpenFiles_Click">Open files</Button>
</WrapPanel>
<ListBox Name="lbFiles" />
</DockPanel>
</Window>
using System;
using System.IO;
using System.Windows;
using Microsoft.Win32;
namespace WpfTutorialSamples.Dialogs
{
public partial class OpenFileDialogMultipleFilesSample : Window
{
public OpenFileDialogMultipleFilesSample()
{
InitializeComponent();
}
private void btnOpenFiles_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Multiselect = true;
openFileDialog.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
if(openFileDialog.ShowDialog() == true)
{
foreach(string filename in openFileDialog.FileNames)
lbFiles.Items.Add(Path.GetFileName(filename));
}
}
}
}
Si vous testez le code ci-dessus, vous verrez que vous pouvez maintenant sélectionner plusieurs fichiers dans le même répertoire en maintenant enfoncée la touche Ctrl ou la touche Maj , puis en cliquant avec la souris sur tous les fichiers à sélectionner. Une fois la sélection validée, vous verrez la liste des fichiers sélectionnés apparaitre dans le contrôle ListBox grâce à une boucle effectuée sur la propriété FileNames .
Résumé
Comme vous avez pu le constater, l'utilisation de OpenFileDialog dans WPF est très simple et simplifie notablement les développements. Vous aurez certainement remarqué que, pour simplifier les exemples présentés, ceux-ci ne comportent aucune gestion d’exception. Lorsque vous travaillez avec des fichiers en lecture ou en écriture, vous devez toujours rechercher à détecter les exceptions, car elles peuvent facilement survenir à cause d'un fichier verrouillé, d'un chemin inexistant ou d'autres problèmes.