Gambas France BETA


Pas de compte ? Incription

evenement de 10 picturebox

Ce sujet est résolu.

1
AuteurMessages
spheris#1 Posté le 21/3/2022 à 21:18:14
Bonsoir,
Je crée 10 picturebox dans le code par cette méthode :

1
2
3
4
5
6
7
8
9
10
PRIVATE SUB ajouter(img AS picture, monindex AS INTEGER)
DIM p AS picture
DIM a AS INTEGER
FOR a = 0 TO 9
p = NEW picturebox(ME)
p.picture = img
p.X = monidex * 40
p.Y = 100
NEXT
END


Quel serait le code à votre avis par lequel puis-je créer un évènement sur chaque picturebox pour pouvoir les déplacer, cliquer dessus, ou changer l'image?
Merci pour votre réponse.
;)
vuott#2 Posté le 22/3/2022 à 01:11:09
Ne cedere ineluctabili possimusD’une manière générale, pour que plusieurs Contrôles graphiques soulèvent un Événement lié à une routine unique, il est nécessaire d’attribuer ces Contrôles à un seul Groupe d’Événements.
Pour filtrer le Contrôle qui soulève l’Événement, on utilisera l’instruction "Last".
Dans votre exemple, vous devrez intégrer cette ligne, comme suit:

1
p = NEW Picturebox(ME) AS "PictureBox"


Donc, si par exemple vous voulez cliquer sur n’importe quel "Picturebox" créé, la routine sera:
1
2
3
4
5
6
PUBLIC SUB PictureBox_MouseUp()

' Imprime - par exemple - la Propriété ".X" de "Picturebox", sur laquelle vous avez cliqué.
PRINT LAST.X

END


https://www.gambas-it.org/wiki/index.php?title=Assegnare_da_codice_pi%C3%B9_oggetti_ad_un_Gruppo_di_eventi
« Vita non suavis esse potest, nec Mors amara. »
jeanyvon#3 Posté le 22/3/2022 à 12:45:23
Gambas? Ma! Et gustoHello!
tu peux aussi créer un tableau de picturebox en créant des objets[] ayant les caractéristiques d'une picturebox.
Vieillir? On peut retarder mais pas y échapper!
spheris#4 Posté le 22/3/2022 à 21:14:46
Vuott,
Merci je vais consulter le lien que tu m'as donné.7

Jean Yvon,
Peux-tu développer s'il te plait, je ne comprends pas bien?
(Avec un petit bout de code si tu veux bien)
;-)
jeanyvon#5 Posté le 23/3/2022 à 07:25:15
Gambas? Ma! Et gustobonjour
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
FOR i = 0 TO 99
cache[i] = NEW monbouton(ME) AS "jeu"
cache[i].w = 25
cache[i].h = 25
cache[i].Tag = i
cache[i].picture = picture["button.bmp"]
cache[i].stretch = TRUE
IF i = 0 THEN
cache[i].x = 10
cache[i].y = 10
ELSE IF i MOD 10 = 0 THEN
cache[i].y = cache[i - 1].y + 25
cache[i].x = cache[0].x
ELSE IF i > 0 THEN
cache[i].y = cache[i - 1].y
cache[i].x = cache[i - 1].x + 25
ENDIF
NEXT
[code]

bon, là se sont des boutons mais tu peux faire la même chose avec des picrurebox.
Vieillir? On peut retarder mais pas y échapper!
Patrick#6 Posté le 23/3/2022 à 11:23:51
Bonjour,
Dans Fmain.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
PUBLIC SUB form_Open()

DIM p AS MaPicturebox
DIM a AS INTEGER
DIM name AS STRING
DIM obs AS Observer

FOR a = 0 TO 9
p = NEW MaPicturebox(ME)
name = "picture" & Str(a)
Object.Attach(p, ME, name) 'Seul moyen que j'ai trouver pour mettre le nom dans une variable
obs = NEW Observer(p) AS "groupe"

NEXT
END

PUBLIC SUB picture1_click()



END

PUBLIC SUB groupe_click()



END


Dans MaPicturebox.class

1
2
3
4
5
6
7
8
9
10
EXPORT
INHERITS PictureBox

PUBLIC SUB _new()

DIM ev AS EventPicture

ev = NEW EventPicture(ME)

END


Dans EventPicture.class

1
2
3
4
5
6
7
8
9
10
11
12
13
PUBLIC SUB _new(mp AS MaPicturebox)

DIM obs AS Observer

obs = NEW Observer(mp) AS "picture"

END

PUBLIC SUB picture_click()

PRINT "click"

END


L’intérêt de ce code est que lorsque on clique sur une image les 3 événements vont être levé :
- Dans Fmain groupe_click() va gérer ce qui est commun à toutes les images tandis que picture1 à n_click() va gérer les cas particuliers.
- Dans EventPicture picture_click() va gérer tous ce qui est générique aux images. Dans un projet on peut avoir plusieurs formulaires avec des images (ou autre) nécessitants le même traitement, c'est un moyen facile d'y parvenir et de factoriser son code.
spheris#7 Posté le 24/3/2022 à 00:18:40
Patrick,
cette solution est vraiment recherchée mais malheureusement pas adapté à ma situation.
La solution de Jean Yvon marche super et c'est celle que je vais utiliser.
un grand merci pour votre aide.
1