GUI : Ajouter un menu
Nous allons ajouter un menu à notre fenêtre, pour ouvrir une fenêtre de sélection de fichier (file browser).
Comme nous avons à notre disposition l'IDE Visual Studio, ne nous en privons pas. Nous pouvons simplement ajouter un composant ToolStrip en le sélectionnant dans la boite d'outils et en le déposant dans la fenêtre à l'aide de la souris (drag and drop).
Ensuite, nous pouvons cliquer sur le composant en mode design et sélectionner l'option DropDownButton.
Nous pouvons entrer le texte de la liste (dans notre cas File), puis cliquer sur le premier élément de la liste et entrer le texte de l'option (dans notre cas Open...).
Par défaut, les éléments sont représentés sous la forme d'images. Nous pouvons spécifier que nous désirons les afficher sous forme de texte en effectuant un clic droit sur un élément et sélectionner dans le groupe DisplayStyle l'option Text. Nous avons à notre disposition les options suivantes : None, Text, Image, ImageAndText.
Je sais que cela peut sembler stupide de déclarer une option et de la rendre invisible, mais dans certains cas cela peut se révéler plus pratique de seulement jouer sur une de ses propriétés pour la rendre visible que de la créer.
Pour associer une action à l'évènement généré par un clic sur l'option, il nous suffit de double cliquer sur l'option en mode design, et une fenêtre s'ouvre alors à nous avec cette partie de code qui nous intéresse :
Code c# (Form1.cs : clic du menu) (3 lignes)
private void fileToolStripMenuItem_Click(object sender, EventArgs e) { }
Nous allons donc commencer à mettre les mains dans le cambouis... Nous allons maintenant spécifier que dans ce cas une fenêtre de sélection de fichier doit apparaître.
Petite astuce : Nous pouvons commencer à introduire le début des noms de classes ou de méthodes que nous désirons utiliser, puis utiliser la combinaison de touches [Shift] + [Space] (les touches majuscules et barre d'espace) qui active les propositions automatiques (auto complete).
Code c# (Form1.cs : sélection de fichier) (5 lignes)
private void fileToolStripMenuItem_Click(object sender, EventArgs e) { openFileDialog.ShowDialog(); }
Pour vérifier que la boîte de sélection de fichier effectue bien ce que nous en attendons, nous allons placer dans notre fenêtre un composant qui nous permet d'afficher du texte. Comme pour notre ToolStrip, nous allons sélectionner dans l'onglet Toolbox le composant Label, et le déposer dans notre fenêtre en mode édition. Nous pouvons supprimer le texte, et dans l'onglet de propriétés, nous pouvons renommer le composant en filePathLabel (nom utilisé dans le code pour cette instance de Label), et affecter la valeur false à la propriété Visible.
Code c# (Form1.Designer.cs : ajout d'un label) (9 lignes)
//Dans les déclarations de variables de la classe Form1 private System.Windows.Forms.Label filePathLabel; //Dans la méthode InitializeComponent() de la classe Form1 this.filePathLabel.AutoSize = true; this.filePathLabel.Name = "filePathLabel"; this.filePathLabel.TabIndex = 1; this.filePathLabel.Visible = false;
Nous allons maintenant modifier le code correspondant à l'évènement du clic sur le menu, pour que non seulement il ouvre une fenêtre de sélection de fichier, mais qu'en plus il place le nom du fichier sélectionné dans la zone de texte que nous venons de créer, et que cette zone soit visible.
Code c# (Form1.cs : affichage du label) (11 lignes)
private void fileToolStripMenuItem_Click(object sender, EventArgs e) { //Déclaration et initialisation de notre fenêtre de sélection de fichiers //Affichage de la fenêtre openFileDialog.ShowDialog(); //Affectation du label avec le chemin du fichier sélectionné; filePathLabel.Text = openFileDialog.FileName; //Affichage du label filePathLabel.Visible = true; }
Refactoring
Notre programme fonctionne, mais nous pouvons le modifier légèrement pour que le code soit plus facile à comprendre.
Nous allons déplacer la déclaration de la variable openFileDialog pour que sa portée ne se limite pas à la méthode. De cette manière, nous pouvons l'utiliser dans d'autres méthodes, et par exemple déplacer le code qui affichait le chemin, pour en faire une nouvelle méthode à part.
Code c# (Form1.cs : affichage du label) (10 lignes)
private void fileToolStripMenuItem_Click(object sender, EventArgs e) { openFileDialog.ShowDialog(); fillAndDisplayPathLabel(); } private void fillAndDisplayPathLabel() { filePathLabel.Text = openFileDialog.FileName; filePathLabel.Visible = true; }
Nous pouvons aussi modifier la fenêtre de sélection de fichier pour ne permettre que la sélection de fichiers exécutables et de dll.
Code c# (Form1.Designer.cs : filtrer les fichiers à sélectionner) (5 lignes)
// // openFileDialog // openFileDialog.Filter = "Executable files (.exe)|*.exe|Dynamic librairies (.dll)|*.dll";
Fichiers complets
Code c# (Form1) (27 lignes)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace ClassExplorer { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void fileToolStripMenuItem_Click(object sender, EventArgs e) { openFileDialog.ShowDialog(); fillAndDisplayPathLabel(); } private void fillAndDisplayPathLabel() { filePathLabel.Text = openFileDialog.FileName; filePathLabel.Visible = true; } } }
Code c# (Form1.Designer.cs) (100 lignes)
using System.Windows.Forms; namespace ClassExplorer { partial class Form1 { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.toolStrip1.SuspendLayout(); this.SuspendLayout(); // // toolStrip1 // this.fileToolStripButton}); this.toolStrip1.Name = "toolStrip1"; this.toolStrip1.TabIndex = 0; this.toolStrip1.Text = "toolStrip1"; // // fileToolStripButton // this.fileToolStripButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; this.fileToolStripMenuItem}); this.fileToolStripButton.Image = ((System.Drawing.Image)(resources.GetObject("fileToolStripButton.Image"))); this.fileToolStripButton.ImageTransparentColor = System.Drawing.Color.Magenta; this.fileToolStripButton.Name = "fileToolStripButton"; this.fileToolStripButton.Text = "File"; // // fileToolStripMenuItem // this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; this.fileToolStripMenuItem.Text = "Open..."; // // filePathLabel // this.filePathLabel.AutoSize = true; this.filePathLabel.Name = "filePathLabel"; this.filePathLabel.TabIndex = 1; this.filePathLabel.Visible = false; // // Form1 // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Controls.Add(this.filePathLabel); this.Controls.Add(this.toolStrip1); this.Name = "Form1"; this.Text = "My Class Explorer"; this.toolStrip1.ResumeLayout(false); this.toolStrip1.PerformLayout(); this.ResumeLayout(false); this.PerformLayout(); // // openFileDialog // openFileDialog.Filter = "Executable files (.exe)|*.exe|Dynamic librairies (.dll)|*.dll"; } #endregion private ToolStrip toolStrip1; private ToolStripDropDownButton fileToolStripButton; private ToolStripMenuItem fileToolStripMenuItem; private Label filePathLabel; private OpenFileDialog openFileDialog; } }
Code c# (Program.cs) (19 lignes)
using System; using System.Collections.Generic; using System.Windows.Forms; namespace ClassExplorer { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); } } }
Nederlandse vertaling
U hebt gevraagd om deze site in het Nederlands te bezoeken. Voor nu wordt alleen de interface vertaald, maar nog niet alle inhoud.Als je me wilt helpen met vertalingen, is je bijdrage welkom. Het enige dat u hoeft te doen, is u op de site registreren en mij een bericht sturen waarin u wordt gevraagd om u toe te voegen aan de groep vertalers, zodat u de gewenste pagina's kunt vertalen. Een link onderaan elke vertaalde pagina geeft aan dat u de vertaler bent en heeft een link naar uw profiel.
Bij voorbaat dank.
Document heeft de 26/09/2006 gemaakt, de laatste keer de 26/10/2018 gewijzigd
Bron van het afgedrukte document:https://www.gaudry.be/nl/csharp-gui-menu.html
De infobrol is een persoonlijke site waarvan de inhoud uitsluitend mijn verantwoordelijkheid is. De tekst is beschikbaar onder CreativeCommons-licentie (BY-NC-SA). Meer info op de gebruiksvoorwaarden en de auteur.