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) |
|||||||
LE COURS 10. Les graphismes
11. Les menus
AIDES-MÉMOIRES CHOSES DIVERSES Souvent Posées Questions
Liens utiles
|
Partie 6
Encore et toujours des contrôles
|
Exercice |
Exécutable |
Sources |
Inventaire |
Il s'agit d'une classe-fille à la fois de la classe Listbox et de la classe Textbox. Elle en hérite donc les principales propriétés. En gros, on peut considérer qu'une ComboBox, c'est une liste modifiable et/ou déroulante :
L'aspect de la ComboBox dépend de la valeur de la propriété DropDownStyle :
Rappel : le caractère déroulant d'une Combobox n'influence que son aspect, alors que son caractère modifiable influence son comportement (peut-on ou non y entrer autre chose qu'un item de la liste).
Cette classe est une espèce de croisement entre la Listbox et la Checkbox. De la première, elle hérite toutes les propriétés hormis celles liées à la multisélection. Cette classe affiche une liste dans laquelle chaque élément est représenté par une case à cocher :
Le fait qu'il s'agisse d'une Listbox (presque) ordinaire fait que, malgré les apparences, on peut la traiter comme telle. Les éléments qui se trouvent à l'intérieur, contrairement aux apparences, ne sont pas des CheckBox mais de simples Item. Ca, c'est la bonne nouvelle. La moins bonne, c'est que ces Item ne constituent pas des objets différents (ils sont de simples String au sein d'une propriété d'un objet unique de la classe CheckListBox. Moralité, si on peut identifier un Item par son indice (au sein de la collection des Items, oude la collection plus restreinte des seuls Items cochés), on ne peut pas savoir, par exemple, quel Item vient d'être coché ou décoché via le paramètre sender. Ce n'est généralement pas vraiment gênant : il suffit de savoir ce qui est possible ou non, et de choisir sa stratégie en conséquence.
Un autre truc bon à savoir : contrairement à ce qui se passe avec de vraies CheckBox, les Items ne possèdent pas de propriété Checked qui permettrait de connaître leur état. Rien n'ets perdu pour autant, puisqu'il existe deux moyens alternatifs de récupérer cette information :
Tant qu'on y est, à noter aussi que :
Comme ça, ça a peut-être l'air compliqué, mais c'est loin d'être vraiment méchant.
J'en profite pour faire une petite visite à ce contrôle, qui rend des services collectifs inestimables. Son rôle consiste à être un tableau d'images, destiné à permettre à d'autres contrôles de venir puiser dedans. Il s'agit d'un contrôle invisible. Ce n'est pas le seul, mais c'est le premier que nous rencontrons. Lorsqu'on le sélectionne et qu'on tente de le poser sur la Form, dans la boîte à outils, on voit tout de suite qu'il ne se pose pas sur la Form elle-même, mais à côté.
Pour utiliser ce contrôle, on le remplit via sa propriété Images qui désigne une collection ( et à laquelle s'appliquent donc les méthodes Add et Remove, si on veut en manipuler le contenu par du code). La propriété ColorDepth permet de régler la qualité de codage des images en question, et roule Raoul : on accède ensuite aux images que contient ImageList par la propriété ImageIndex.
Et tiens, si on s'en servait ?
Cet exercice fait fonctionner trois contrôles les uns avec les autres :
la liste de cases à cocher pilote la liste déroulante, qui elle-même provoque l'affichage des images.
Pour afficher celles-ci, vous aurez besoin du conteneur à images ; celui-ci s'appelle
un PictureBox, et la seule propriété qui nous intéresse est celle qui désigne son
contenu, en l'occurrence Image. Une dernière chose : il vous faut les 26 images
des jetons de scrable. Vous les trouverez dans cette archive.
Une dernière chose, avant de vous lancer dans un code compliqué comme une usine réelle à gaz virtuel,
si on prend les choses par le bon bout, le tout tient en une douzaine de lignes simples comme bonjour (ou presque).