Une remarque pertinente ? Une critique impertinente ? Un lynchage en règle ? Une invitation sous les tropiques ? Ecrivez-moi ! |
|
Conçu et enseigné tel qu'en lui même, avec pertes, fracas et
humour de qualité supérieure par Christophe Darmangeat dans le M2 PISE du Master MECI (Université Paris 7) |
|
|
Partie 12
Les menus
Une application informatique sans menus, c'est un
peu comme un restaurant sans ordinateurs. Euh... Je m'égare.
Bon, avec ce tout petit, petit chapitre, on va pouvoir reposer un peu nos neurones
surmenés.
1. Le concepteur de menus
Si l'on veut un ensemble de menus dans sa Form,
il faut créer un objet (un seul) de la classe StripMenu, classe
disponible sous forme de contrôle dans la boîte à outils.
Bien sûr, on peut aussi ajouter un menu par du code, mais étant
donné le peu de cas où cette procédure s'avère
nécessaire, j'en passerai pudiquement les détails sous
silence.
Une fois l'objet StripMenu posé sur la Form, le concepteur de menus
permet, en cliquant sur ce StripMenu, d'entrer à l'intérieur toute
la série des commandes dont on souhaitera
disposer. C'est extrêmement facile et ergonomique, il suffit de cliquer
à côté, ou en-dessous, de l'élément adéquat, pour pouvoir entrer
d'autres éléments.
L'objet MainMenu définit une collection .Items (l'ensemble des menus de plus haut niveau),
qui comprend un certain nombre d'objets de la classe ToolStripMenuItem.
Mais les menus sont organisés les uns par rapport aux
autres sous la forme d'un emboîtement de différents niveaux : il y a les menus de plus haut niveau, puis éventuellement des menus dans ces menus,
puis éventuelement encore des menus dans ces derniers menus, etc. Ces emboîtements de niveaux
correspondent dans VB.Net à un emboîtement de collections. Comme on vient de le voir, les menus
principaux (typiquement : Fichier, Édition, Affichage, etc.) sont
les ToolStripMenuItem membres de la collection Items définie par l'objet
StripMenu.
Ensuite, les menus « secondaires » comme Ouvrir, Enregistrer, Enregistrer sous,
etc. , puis « tertiaires », « quaternaires », etc., sont eux aussi des ToolStripMenuItem de la
collection définie par leur élément parent. Toutefois cette collection n'est alors pas .Items, mais .DropDownItems.
Ca aurait été trop simple, faut dire.
1.1 Propriétés des menus
1.2 Les événements liés aux menus Il s'agit pour l'essentiel de l'événement Click, lorsqu'on parle
d'une commande ordinaire.
Dans le cas d'un menu qui n'est rien censé déclencher, hormis l'apparition
sur sa droite d'un sous-menu, on pourra utiliser si besoin l'événement PopUp.
Enfin, le simple fait qu'un élément soit en surbrillance, suite au passage
de la souris ou du clavier, déclenche un événement Select.
2. Menus contextuels
Il s'agit du menu qui apparaît lors d'un clic droit de la souris,
et dont le contenu varie selon l'endroit où se trouve le curseur.
Pour qu'un ou plusieurs contrôles disposent d'un menu contextuel,
la procédure à suivre est très simple.
Et le tour est joué !
Évidemment, tout cela peut également être réalisé par des liges
de code, mais là encore, nous passerons tout cela sous silence,
l'intérêt en étant réservé aux spécialistes.
A noter qu'un ContextMenu génère un événement PopUp lorsqu'il
apparaît, et que tout comme pour un menu ordinaire, le clic sur l'un
de ses éléments provoque un événement... Click.
Je vous l'avais bien dit, c'était un petit
chapitre tranquille. Enfin, jusque là...
Soyons clairs, l'exercice qui suit est une
vacherie.
Pas tant à cause de la structure des menus, qui se construit facilement grâce au concepteur dont nous venons de parler. Mais le "branchement" de chaque élément de menu ainsi créé, même s'il peut laborieusement être fait à la main, devra être ici entièrement programmé. Ce qui pose le problème de l'exploration des collections de menus, et des sous-collections dans les collections, et des sous-sous-collections dans les collections... autrement dit de la mise en oeuvre d'un traitement récursif pour balayer l'arborescence des menus. C'est un peu difficile quand on n'a pas l'habitude, mais il y a certaines situations où il faut savoir comment employer cette technique. La preuve ! |