Système de menus traditionnel - pearson.fr€¦ · Système de menus traditionnel. Lancez ... Le...

9
 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 traditionnel Lancez 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 : © 2010 Pearson Education France – Visual Basic 2010 – Michel Martin

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