Système de menus traditionnel - pearson.fr€¦ · Système de menus traditionnel. Lancez ... Le...
Transcript of Système de menus traditionnel - pearson.fr€¦ · Système de menus traditionnel. Lancez ... Le...
6
Implémenter des menus
Les menus traditionnels et contextuels sont banalisés sous la forme de simples contrôles dans la Boîte à outils.
Dans les pages qui suivent, nous allons créer deux applications. La première permettra de tracer des ronds et des carrés par l’intermédiaire d’un système de menus et la seconde, par l’intermédiaire d’un menu contextuel.
Système de menus traditionnelLancez la commande Nouveau/Projet dans le menu Fichier. Choisissez .NET Framework 4 dans la liste déroulante Framework. L’entrée Visual Basic/Windows étant sélectionnée dans le volet gauche, choisissez le modèle Application Windows Forms, nommez le projet Menu et validez en cliquant sur OK. Insérez un contrôle MenuStrip sur la feuille de l’application. Ce contrôle est automatiquement reporté dans la partie inférieure de la fenêtre, sous la forme d’une icône intitulée MenuStrip1.
Cliquez sur cette icône et définissez les entrées principales et secondaires du menu, direc-tement sur la feuille de l’application :
Livre VisualBasic.indb 185 15/07/10 16:48
© 2010 Pearson Education France – Visual Basic 2010 – Michel Martin
186 Visual Basic 2010
Commandes principales Commandes secondaires
Tracer Rond et Carré
Rond Rouge et Bleu
Carré Rouge et Bleu
Quitter Application
Nous allons associer les raccourcis clavier Ctrl+R et Ctrl+C aux commandes Tracer/Rond et Tracer/Carré. Pour cela :
∑∑ Cliquez sur l’entrée secondaire Rond sous Tracer et affectez la valeur Ctrl+R à la propriété ShortcutKeys.
∑∑ Cliquez sur l’entrée secondaire Carré sous Tracer et affectez la valeur Ctrl+C à la propriété ShortcutKeys.
Pour vous aider dans la saisie des raccourcis clavier, le plus simple consiste à cliquer sur la flèche située à droite de la valeur de la propriété ShortcutKey et à utiliser la boîte de saisie affichée (voir Figure 6.1).
Figure 6.1Saisie d’un raccourci-clavier.
Le raccourci-clavier s’affiche à droite de la commande de menu, juste après sa saisie (voir Figure 6.2).
Livre VisualBasic.indb 186 15/07/10 16:48
© 2010 Pearson Education France – Visual Basic 2010 – Michel Martin
Chapitre 6 Implémenter des menus 187
Figure 6.2Les deux raccourcis clavier apparaissent en clair.
Par défaut, la commande secondaire Rond doit être validée. Cette affectation par défaut sera signalée par une coche devant la commande secondaire Rond. Cliquez sur cette commande et affectez la valeur True à la propriété Checked. Cliquez sur la commande principale Carré et affectez la valeur False à la propriété Visible pour cacher le menu Carré par défaut.
Pour faciliter la compréhension du listing, vous allez redéfinir le nom des commandes de menu comme suit :
Commande Propriété Name
Tracer/Rond TracerRond
Tracer/Carré TracerCarré
Rond Rond
Carré Carré
Rond/Rouge RondRouge
Rond/Bleu RondBleu
Quitter/Application QuitterApplication
Nous allons maintenant affecter du code aux commandes de menu. Double-cliquez sur la commande secondaire Tracer/Rond et complétez la procédure TracerRond_Click() comme suit :
Private Sub TracerRond_Click(ByVal sender As System.Object, ByVal e As System.„ EventArgs) Handles TracerRond.Click TracerRond.Checked = True TracerCarré.Checked = False Rond.Visible = True Carré.Visible = FalseEnd Sub
Livre VisualBasic.indb 187 15/07/10 16:48
© 2010 Pearson Education France – Visual Basic 2010 – Michel Martin
188 Visual Basic 2010
Cette procédure affiche une coche devant la commande secondaire Tracer/Rond, supprime l’éventuelle coche devant la commande secondaire Tracer/Carré, active le menu principal Rond et cache le menu principal Carré.
Double-cliquez sur la commande secondaire Tracer/Carré et complétez la procédure TracerCarré_Click() comme suit :
Private Sub TracerCarré_Click(ByVal sender As System.Object, ByVal e As System.„ EventArgs) Handles TracerCarré.Click TracerRond.Checked = False TracerCarré.Checked = True Rond.Visible = False Carré.Visible = TrueEnd Sub
Cette procédure effectue des actions analogues à la précédente : suppression de la coche devant la commande secondaire Tracer/Rond, affichage d’une coche devant la commande secondaire Tracer/Carré, dissimulation de la commande principale Rond et affichage de la commande principale Carré.
Construit sur GDI+, le système Windows Forms donne accès à une bibliothèque d’ima-gerie graphique et de texte 2-D et 3-D très fournie. Pour être en mesure d’afficher des éléments graphiques dans une feuille, vous devez définir un objet Graphics avec la fonction CreateGraphics().
Double-cliquez sur un emplacement libre de la feuille et complétez la procédure Form1_Load() comme suit :
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)„ Handles MyBase.Load G = Me.CreateGraphics()End Sub
L’unique instruction de cette procédure définit l‘objet graphique G. Remarquez l’utilisation du mot-clé Me pour référencer l’instance de la classe en cours d’exécution.
Pour compléter cette procédure, définissez l’objet G, dans les premières lignes du code :
Dim G As Graphics
L’objet graphique G ayant été défini et implémenté, double-cliquez sur la commande secondaire Rond/Rouge et complétez la procédure RondRouge_Click() comme suit :
Private Sub RondRouge_Click(ByVal sender As System.Object, ByVal e As System.
„ EventArgs)Handles RondRouge.Click ‘ Création du rectangle dans lequel est inscrit le cercle Dim rect As New Rectangle(50, 50, 100, 100)
Livre VisualBasic.indb 188 15/07/10 16:48
© 2010 Pearson Education France – Visual Basic 2010 – Michel Martin
Chapitre 6 Implémenter des menus 189
‘ Effacement de la fenêtre G.Clear(Me.BackColor)
‘ Affichage du cercle Dim Pen As New Pen(Color.Black, 3) G.DrawEllipse(Pen, rect)
‘ Remplissage du cercle Dim brBrush = New SolidBrush(Color.Red) G.FillEllipse(brBrush, rect)End Sub
La première ligne définit le rectangle dans lequel s’inscrit le cercle à tracer :
Dim rect As New Rectangle(50, 50, 100, 100)
La deuxième instruction efface le contenu de la fenêtre afin de ne pas gêner le tracé en cours. Remarquez l’utilisation du mot-clé Me pour référencer la fenêtre en cours d’exécution :
G.Clear(Me.BackColor)
Le bloc d’instructions suivant définit la couleur du crayon et trace un cercle à l’aide de la fonction DrawEllipse() :
Dim Pen As New Pen(Color.Black, 3)G.DrawEllipse(Pen, rect)
Le dernier bloc d’instructions définit la couleur de remplissage brBrush et utilise la fonction FillEllipse() pour remplir le cercle :
Dim brBrush = New SolidBrush(Color.Red)G.FillEllipse(brBrush, rect)
Double-cliquez sur la commande secondaire Rond/Bleu et complétez la procédure Rond-Bleu_Click() comme suit :
Private Sub RondBleu_Click(ByVal sender As System.Object, ByVal e As System.„ EventArgs) Handles RondBleu.Click ‘ Création du rectangle dans lequel est inscrit le cercle Dim rect As New Rectangle(50, 50, 100, 100)
‘ Effacement de la fenêtre G.Clear(Me.BackColor)
‘ Affichage du cercle Dim Pen As New Pen(Color.White, 3) G.DrawEllipse(Pen, rect)
Livre VisualBasic.indb 189 15/07/10 16:48
© 2010 Pearson Education France – Visual Basic 2010 – Michel Martin
190 Visual Basic 2010
‘ Remplissage du cercle Dim brBrush = New SolidBrush(Color.Blue) G.FillEllipse(brBrush, rect)End Sub
Comme vous pouvez le voir, le code de cette procédure est très proche de celui de RondRouge_Click(). Seules les couleurs du crayon et du remplissage changent. Nous n’y reviendrons pas.
Double-cliquez sur la commande secondaire Carré/Rouge et complétez la procédure CarréRouge_Click() comme suit :
Private Sub CarréRouge_Click(ByVal sender As System.Object, ByVal e As System.„ EventArgs) Handles CarréRouge.Click ‘ Effacement de la fenêtre G.Clear(Me.BackColor)
‘ Affichage du carré Dim Pen As New Pen(Color.Black, 3) Dim rect As New Rectangle(50, 50, 100, 100) G.DrawRectangle(Pen, rect)
‘ Remplissage du carré Dim brBrush = New SolidBrush(Color.Red) G.FillRectangle(brBrush, rect)End Sub
Après avoir effacé le contenu de la fenêtre :
G.Clear(Me.BackColor)
La couleur noire est affectée au crayon :
Dim Pen As New Pen(Color.Black, 3)
Un objet rect de type Rectangle est alors défini et le carré rect est tracé en utilisant le crayon Pen :
Dim rect As New Rectangle(50, 50, 100, 100)G.DrawRectangle(Pen, rect)
Le dernier bloc d’instructions définit la couleur de remplissage dans l’objet brBrush et utilise cet objet pour remplir le carré à l‘aide de la fonction FillRectangle() :
Dim brBrush = New SolidBrush(Color.Red)G.FillRectangle(brBrush, rect)
Livre VisualBasic.indb 190 15/07/10 16:48
© 2010 Pearson Education France – Visual Basic 2010 – Michel Martin
Chapitre 6 Implémenter des menus 191
Double-cliquez sur la commande secondaire Carré/Bleu et complétez la procédure Carré-Bleu_Click() comme suit :
Private Sub CarréBleu_Click(ByVal sender As System.Object, ByVal e As System.„ EventArgs) Handles CarréBleu.Click ‘ Effacement de la fenêtre G.Clear(Me.BackColor)
‘ Affichage du carré Dim Pen As New Pen(Color.White, 3) Dim rect As New Rectangle(50, 50, 100, 100) G.DrawRectangle(Pen, rect)
‘ Remplissage du carré Dim brBrush = New SolidBrush(Color.Blue) G.FillRectangle(brBrush, rect)End Sub
Le code de cette procédure est très proche de celui de CarréRouge_Click(). Seules les couleurs du crayon et du remplissage changent. Nous n’y reviendrons pas.
Enfin, double-cliquez sur la commande secondaire Quitter/Application et ajoutez une instruction End à la procédure QuitterApplication_Click() :
Private Sub QuitterApplication_Click(ByVal sender As System.Object, ByVal e As „ System.EventArgs) Handles QuitterApplication.Click EndEnd Sub
Voici le listing complet de l’application. Le code généré par Form Designer a été masqué. Seul son en-tête apparaît en caractères italiques. Cette application se trouve dans le dossier Menu après installation des sources de l’ouvrage.
Public Class Form1 Dim G As Graphics
Private Sub MenuStrip1_ItemClicked(ByVal sender As System.Object, ByVal e „ As System.Windows.Forms.ToolStripItemClickedEventArgs) Handles MenuStrip1. „ ItemClicked
End Sub
Private Sub TracerRond_Click(ByVal sender As System.Object, ByVal e As „ System.EventArgs) Handles TracerRond.Click TracerRond.Checked = True TracerCarré.Checked = False
Livre VisualBasic.indb 191 15/07/10 16:48
© 2010 Pearson Education France – Visual Basic 2010 – Michel Martin
192 Visual Basic 2010
Rond.Visible = True Carré.Visible = False End Sub
Private Sub TracerCarré_Click(ByVal sender As System.Object, ByVal e As „ System.EventArgs) Handles TracerCarré.Click TracerRond.Checked = False TracerCarré.Checked = True Rond.Visible = False Carré.Visible = True End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System. „ EventArgs) Handles MyBase.Load ‘Définition de l’objet graphique G = Me.CreateGraphics() End Sub
Private Sub RondRouge_Click(ByVal sender As System.Object, ByVal e As „ System.EventArgs) Handles RondRouge.Click ‘ Création du rectangle dans lequel est inscrit le cercle Dim rect As New Rectangle(50, 50, 100, 100)
‘ Effacement de la fenêtre G.Clear(Me.BackColor)
‘ Affichage du cercle Dim Pen As New Pen(Color.Black, 3) G.DrawEllipse(Pen, rect)
‘ Remplissage du cercle Dim brBrush = New SolidBrush(Color.Red) G.FillEllipse(brBrush, rect) End Sub
Private Sub RondBleu_Click(ByVal sender As System.Object, ByVal e As System. „ EventArgs) Handles RondBleu.Click ‘ Création du rectangle dans lequel est inscrit le cercle Dim rect As New Rectangle(50, 50, 100, 100)
‘ Effacement de la fenêtre G.Clear(Me.BackColor)
‘ Affichage du cercle
Livre VisualBasic.indb 192 15/07/10 16:48
© 2010 Pearson Education France – Visual Basic 2010 – Michel Martin
Chapitre 6 Implémenter des menus 193
Dim Pen As New Pen(Color.White, 3) G.DrawEllipse(Pen, rect)
‘ Remplissage du cercle Dim brBrush = New SolidBrush(Color.Blue) G.FillEllipse(brBrush, rect) End Sub
Private Sub CarréRouge_Click(ByVal sender As System.Object, ByVal e As „ System.EventArgs) Handles CarréRouge.Click ‘ Effacement de la fenêtre G.Clear(Me.BackColor)
‘ Affichage du carré Dim Pen As New Pen(Color.Black, 3) Dim rect As New Rectangle(50, 50, 100, 100) G.DrawRectangle(Pen, rect)
‘ Remplissage du carré Dim brBrush = New SolidBrush(Color.Red) G.FillRectangle(brBrush, rect) End Sub
Private Sub CarréBleu_Click(ByVal sender As System.Object, ByVal e As „ System.EventArgs) Handles CarréBleu.Click ‘ Effacement de la fenêtre G.Clear(Me.BackColor)
‘ Affichage du carré Dim Pen As New Pen(Color.White, 3) Dim rect As New Rectangle(50, 50, 100, 100) G.DrawRectangle(Pen, rect)
‘ Remplissage du carré Dim brBrush = New SolidBrush(Color.Blue) G.FillRectangle(brBrush, rect) End Sub
Private Sub QuitterApplication_Click(ByVal sender As System.Object, ByVal e „ As System.EventArgs) Handles QuitterApplication.Click End End SubEnd Class
Cette application se trouve dans le dossier Menu après installation des sources de l’ouvrage.
Livre VisualBasic.indb 193 15/07/10 16:48
© 2010 Pearson Education France – Visual Basic 2010 – Michel Martin