46Fermer48
SasumeLe 01/05/2009 à 00:22
Zephyr (./40) :
Gros retour au sujet avec une nouvelle question : jusqu'à maintenant, je n'avais pas envisagé faire de transmission d'évènements autrement que de père en fils. Par exemple, quand on appuie sur une touche du clavier, la fenêtre active transmet à l'onglet du TabControl actif, qui transmet à la TextBox active, qui traite l'évènement.
D'emblée, ça pose un petit problème qui n'est pas bien compliqué à résoudre mais que je ne trouve quand même pas très naturel : on connait le contrôle actif mais pas le parent du contrôle actif, et encore moins le parent du parent du contrôle actif, etc. Il faut donc en permanence conserver non pas le contrôle actif, mais toute la chaine qui permet d'y arriver en partant du contrôle racine ("Desktop", dans mon cas).
En fait, je dirais que le problème est même plus en amont : pourquoi passer par toute une chaîne de composants (le chemin racine -> fils actif) alors que tu connais déjà le composant actif ? Autant directement soumettre l’évènement au composant actif.

Par contre, si celui-ci ne traite pas l’évènement il peut être intéressant de faire remonter ce dernier vers ses parents, qui seraient plus susceptibles de le traiter.
Autre soucis : quand on clique sur un bouton dans une fenêtre inactive, ça doit activer la fenêtre (pour la faire passer au premier plan, entre autres). Mais même s'il est possible de gérer ça avec une transmission de père en fils (la fenêtre va intercepter l'évènement "au passage", s'activer, et transmettre à ses fils), une transmission inverse m'aurait semblé plus logique (la fenêtre s'active parceque l'un de ses fils a reçu un évènement, et non l'inverse).
Ah bah voilà ^^