Groupe de boutons
Le
400GpJ

Bonjour,
J'utilise des boutons pour constituer des plateaux de jeu. Sous VB6 je les
créais avec le même nom. J'obtenais un groupe indicé, qui me permettait
d'ajouter du code s'appliquant à tous les boutons et exploitant l'indice du
bouton qui était récupéré par l'é&vénement click.
En .Net, je suppose qu'il faut utiliser des collections. J'ai essayé avec un
panel en y créant des boutons. A priori pas de problème particulier pour
accéder aux boutons et les modifier, même si la syntaxe devient un peu lourde.
En revanche je ne trouve pas :
1- comment mettre du code sur l'événement click (par exemple) sans
dupliquer le code 1 fois par bouton (400 dans le cas présent)
2- comment créer dynamiquement les boutons en leur affectant un nom
variable avec une boucle fornext
D'avance merci pour les bonnes idées (même du genre ce n'est pas du tout
comme ça qu'il faut faire, une solution plus simple consisterait à.).
J'utilise des boutons pour constituer des plateaux de jeu. Sous VB6 je les
créais avec le même nom. J'obtenais un groupe indicé, qui me permettait
d'ajouter du code s'appliquant à tous les boutons et exploitant l'indice du
bouton qui était récupéré par l'é&vénement click.
En .Net, je suppose qu'il faut utiliser des collections. J'ai essayé avec un
panel en y créant des boutons. A priori pas de problème particulier pour
accéder aux boutons et les modifier, même si la syntaxe devient un peu lourde.
En revanche je ne trouve pas :
1- comment mettre du code sur l'événement click (par exemple) sans
dupliquer le code 1 fois par bouton (400 dans le cas présent)
2- comment créer dynamiquement les boutons en leur affectant un nom
variable avec une boucle fornext
D'avance merci pour les bonnes idées (même du genre ce n'est pas du tout
comme ça qu'il faut faire, une solution plus simple consisterait à.).
Salut,
Alors à mon avis, "ce n'est pas du tout comme ça qu'il faut faire, une
solution plus simple consisterait à" créer dynamiquement tes boutons à
l'aide d'une boucle et d'ajouter un handler unique sur l'évènement Click de
chacun d'entre eux... Un truc du genre :
for i as integer = 0 to 399
dim Bouton as new Button
AddHandler Bouton.Click, addressOf MyClickHandler()
'Positionne et ajoute le bouton à ton conteneur (Panel)
Bouton.Width = ...
Bouton.Height = ...
Bouton.Left = ...
Bouton.Top = ...
Me.MyPanel.Controls.Add(Bouton)
next
avec ton handler déclaré ainsi :
private Sub MyClickHandler(sender as Object, e as System.EventArgs)
'Ici ton code pour l'évènement click
end sub
Je ne sais pas si ça répond à ta question
@+
Steph
propre que de rajouter 500 checkbox manuellement.
--
CS
"Stephane TUET" wrote:
Merci beaucoup, ça correspond a priori parfaitement à ce que je recherche
(et c'est nettement plus propre que ce que j'utilisais en VB6.
Je vais essayer.
Cordialement.
"Stephane TUET" a écrit :
La création des boutons marche bien.
addressOf MyClickHandler()
doit être remplacé par
addressOf MyClickHandler
ensuite chaque bouton décleche le handler.
En revanche je ne sais pas comment récupérer l'index du bouton dans la
collection pour que le handler sache quel traitement appliquer selon le
bouton qui a été utilisé.
Cordialement,
"400GpJ" a écrit :
Click alors il n'y a aucun intéret à faire ce que je t'ai indiqué puisque
mon code permettait d'avoir la même gestion du click pour chacun des
boutons. S'il n'y a pas deux boutons qui réagissent de la même façon alors
je ne vois pas d'autre moyen que de les créer un par un. Si par contre tu
peux faire des regroupements entre tes boutons, il faut créer un handler
différent par traitement différent... Par exemple, si tu as 20 boutons, que
les 10 premiers ont un traitement identiques et les 10 derniers un autre
traitement tu peux faire qq chose comme cela :
for i as integer = 0 to 19
dim Bouton as new Button
if i < 10 then
AddHandler Bouton.Click, addressOf MyClickHandler1
else
AddHandler Bouton.Click, addressOf MyClickHandler2
'Positionne et ajoute le bouton à ton conteneur (Panel)
Bouton.Width = ...
Bouton.Height = ...
Bouton.Left = ...
Bouton.Top = ...
Me.MyPanel.Controls.Add(Bouton)
next
Si tu n'as aucun regroupement possible, alors il faut gérer tes boutons un
par un, un peu comme tu le faisais en VB6 puisque tu devais avoir un énorme
select case sur ton index du bouton.
Voilà, en espérant que ça t'aide.
@+
Steph
"400GpJ"
du bouton. Celui-ci m'était retourné par l'événement click après que les
boutons aient été créés avec le même nom, ce qui provoquait un indicage
automatique (je nommais le premier X, puis le second X et ils se
transformaient respectivement en X(0) et X(1))
X_click avait alors un argument index et je pouvais donc les manipuler dans
les deux sens. Tout ce dont j'ai besoin c'est d'un index.
A défaut il faudra que je crée 400 fois le même bout de code appelant une
fonction avec comme argument le numéro du bouton, c'est lourd.
Si cette limite se confirme, je vais être obligé de creuser l'exploitation
des coordonnées du cuseur au moment du click pour m'en sortir, ce qui me
semble lourdingue, mais qui doit me permettre de m'en sortir avec un handler
unique pour tous mes boutons.
Je suis preneur de toute idée géniale sur ce qui me semble être une
regression significative de .net sur VB6
"Stephane TUET" a écrit :
(un panel) et ensuite récupérer l'index du bouton comme ceci dans ton
handler (en partant du principe que tu n'as QUE tes boutons comme contrôles
dans ton panel) :
dim index as integer = me.myPanel.Controls.IndexOf(DirectCast(sender,
Control))
@+
Steph
"400GpJ"
des boutons (c'est nettement plus propre). Juste un point, la syntaxe
proposée ne passe pas ",Control" est refusé, en revanche :
dim index as integer = me.myPanel.Controls.IndexOf(sender)
semble parfaitement fonctionner.
Encore merci.
"Stephane TUET" a écrit :
Ca par contre c'est ultra pas propre, je dirais même bourrain ^^
Le mieux pour différencier dans ton handler le bouton déclancheur de
l'événement est d'utiliser le paramètre "sender" de l'événement et
d'ensuite travailler avec ça, et pas avec un index.
Bien sûr s'il te faut absolument un index, tu crées une classe bouton
dérivée qui rajoute un champ en plus intitulé "index".
--
Pierre ALEXIS
Most Valuable Student (MVS)
Courriel & messenger :
Homepage : http://student.ulb.ac.be/~palexis/
Je veux bien que mon code soit bourrin, je ne suis pas expert .NET et je
n'ai jamais dit que cette solution était la meilleure. Par contre je serais
curieux de savoir comment tu procèderais pour différencier un bouton parmis
400 rien qu'avec le paramètre "sender" et sans travailler avec son index
(c'est à mon avis un problème récurrent).
Steph
"Pierre Alexis [MVS]" news: %