Gambas France BETA


Pas de compte ? Incription

Modifier picturebox en boucle

Ce sujet est résolu.

1
AuteurMessages
didier18#1 Posté le 17/3/2014 à 11:53:19
Bonjour
Je souhaiterai pouvoir accéder au travers d'une boucle for/next à plusieurs objets picturebox (déjà en place et nommés) afin de modifier leur contenu (soit attribuer une nouvelle image ou effacer celle qui s'y trouve. J'ai essayé la syntaxe suivante (qui ne fonctionne pas)
Dim I as integer
For I = 45 to 55
picturebox(I).picture=null
Next
Évidement la solution picturebox45.picture=null picturebox46.picture=null etc... fonctionne en direct, mais ce n'est pas très élégant et fastidieux... D'autant + que de 45 to 55 peuvent faire référence à d'autres valeurs (que je passerai en variables)
Auriez-vous une solution à me proposer, merci par avance pour vos réponses.
Reivillo#2 Posté le 17/3/2014 à 18:56:49
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »Bonsoir didier18.
1
picturebox[I].picture=NULL
ou
1
picturebox[I].picture=picture[NULL]

Reivillo.



Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
Flachy Joe#3 Posté le 17/3/2014 à 19:04:50
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut
en fait c'est plus simple de créer tes picturebox dans le code, par exemple :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PUBLIC LesPictBox AS OBJECT[11]

PUBLIC SUB Form_Open()
DIM i AS INTEGER
FOR i = 0 TO 10
LesPictBox[i] = NEW PictureBox(ME)

'Placement de la picturebox
LesPictBox[i].x=64*i
LesPictBox[i].w=64
NEXT
END

PUBLIC SUB Effacer(De AS INTEGER , A AS INTEGER)
DIM I AS INTEGER
FOR I = De TO A
LesPictBox[I].picture=NULL
NEXT
END

Sinon il faut remplir initialement le tableau avec tes pictbox pour pouvoir ensuite y accéder par un indice.
1
2
3
4
5
6
PUBLIC LesPictBox AS OBJECT[11]
PUBLIC SUB Form_Open()
LesPictBox[0]=PictureBox45
LesPictBox[1]=PictureBox46
'etc...
END
;) Flachy Joe ;)
didier18#4 Posté le 17/3/2014 à 21:12:39
Bonsoir
Merci à Reivillo et Flachy Joe pour votre réactivité. Malheureusement cela ne fonctionne toujours pas. En remplaçant les "()" par des "[]" comme me conseille Reivillo, j'obtient toujours l'erreur d'attribution d'un interger alors qu'un objet est attendu...
J'ai également testé la soluce de Flachy Joe. Erreur à la 1ère ligne (Erreur de syntaxe dans FMain.class:3.). Apparement le "[11] ne passe pas ??? Donc j'ote le [11] -cela indiquai je suppose le nombre d'objets- et là ça passe... jusqu'à LesPictBox = New PictureBox(Me). Là nouveau message d'erreur "Référence d'objet NULL dans FMain:11. J'ai également testé en remplissant initialement le tableau (2ème partie de la soluce) et même message d'erreur mais peut être cla vient-il de la suppression du [11] ?
D'après ce que j'en comprend Flachy Joe, on attribue une variable objet à des objets (picturebox)... Ne peut-on travailler directement sur les objets au travers d'une boucle for/next ? Heu... sur la Form j'avais bien entendu déposé 11 picturebox numérotés de 1 à 11. Ci-après le code complet des essais...

' Gambas class file

Public LesPictBox As Object '[11]
Public Sub _new()

End


Public Sub Form_Open()
Dim i As Integer

For i = 1 To 11
LesPictBox = New PictureBox(Me) '<--- Erreur objet NULL

'Placement de la picturebox
LesPictBox.x = 64 * i
LesPictBox.w = 64
Next
LesPictBox[1] = PictureBox1
LesPictBox[2] = PictureBox2
LesPictBox[3] = PictureBox3
LesPictBox[4] = PictureBox4
LesPictBox[5] = PictureBox5
LesPictBox[6] = PictureBox6
LesPictBox[7] = PictureBox7
LesPictBox[8] = PictureBox8
LesPictBox[9] = PictureBox9
LesPictBox[10] = PictureBox10
LesPictBox[11] = PictureBox11
End

Public Sub Effacer(De As Integer, A As Integer)
Dim I As Integer
For I = De To A
LesPictBox[I].picture = Null
Next
End
Flachy Joe#5 Posté le 17/3/2014 à 21:21:01
Iguane : Il Gambas Uniquement pour Activer ses NEuronesQuelle version de gambas tu utilises ?
Mon code est valide pour Gambas3 (testé avec la version 3.5.90).

Revoit la doc sur la déclaration et l'utilisation des tableaux.
http://gambasdoc.org/help/comp/gb/object%5B%5D?v3
;) Flachy Joe ;)
didier18#6 Posté le 17/3/2014 à 21:35:43
J'utilise la version 3.5.2.
Mais je pense que meme avec une version ultérieure, il doit y avoir une solution identique ?
Arghh l'aide est en anglais... j'aurai du travaillé + à l'école...

Bon ben apparemment c'est ma version de Gambas qui est "beuguée"... J'ai les mêmes message d'erreur en utilisant l'exemple "objtexbox".
Reivillo#7 Posté le 18/3/2014 à 15:05:43
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »Tu utilises par exemple un tableau de 11 éléments:
Tes éléments seront indexés de élément[0]...à...élément[10]
l'indexage démarre à [0] et non à [1].
Quant tu invoques l'élément[11], tu as une Erreur,
normal, l'élément[11] n'existe pas,
il te faudrait un tableau à 12 éléments...
Mais pour contourner ce problème,
tu peux créer tes éléments dynamiquement.
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
' Gambas class file

PUBLIC LesPictBox AS NEW PictureBox[]

PUBLIC SUB Form_Open()

DIM iLoopFor AS INTEGER = 0

PRINT "Avant FOR ";
NLesPictBox
FOR iLoopFor = iLoopFor TO 11
LesPictBox.Add(NULL, LesPictBox.Count)
LesPictBox[LesPictBox.Count - 1] = NEW PictureBox(ME)
LesPictBox[LesPictBox.Count - 1].Picture = Picture["icon:/16/gambas"]
LesPictBox[LesPictBox.Count - 1].X = (LesPictBox.Count - 1) * 25
NEXT
PRINT "Apres FOR ";
NLesPictBox

END

PUBLIC SUB NLesPictBox()

PRINT "LesPictBox = " & LesPictBox.Count & " élément(s)"

END
Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
Reivillo#8 Posté le 18/3/2014 à 18:00:21
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »Le Code, du message précédent à été modifier.
Fonctionne sur Gambas 3.5.2.
Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
didier18#9 Posté le 18/3/2014 à 18:03:11
Et pis ça fonctionne !!! Bonsoir et MERCI Reivillo en créant les éléments dynamiquement on peut donc les manipuler. C'est un peu plus compliqué que ce que je tentais initialement mais bon le principal c'est d'y arriver.
Merci également à Flachy Joe ta participation (même si je ne m'explique toujours pas pourquoi j'ai une erreur quand je tape en déclaration de variable "Public LesPictBox As Object '[11]" ou que je reprend l'exemple "PUBLIC aobjDisplay AS Object[9, 9]".
Peut être un autre post...
Reivillo#10 Posté le 18/3/2014 à 18:15:27
C' est ici, et nul part ailleurs. « Et pis c'est tout ! »
ou que je reprend l'exemple "PUBLIC aobjDisplay AS Object[9, 9]".
Essaye ceci:
1
PUBLIC aobjDisplay AS NEW OBJECT[9, 9]
Ne pas oublier le NEW.
Version LinuxMint 13 (1.6.1-1+maya-mate(32-bit)) LTS Noyau 3.14.33-031433-generic (27-02-2015)
LinuxMint 13 Mate Fr ICI, LinuxMint 17 Mate Fr .
Programmation Gambas3 Installé depuis la Console Terminal avec successivement: Les 3 Lignes sudo en Gras ci-dessous...
sudo add-apt-repository ppa:gambas-team/gambas3
sudo apt-get update
sudo apt-get install gambas3 -y
Gambas3.8.4-57.47 (Mise à Jour Auto via mintupdate le 28-01-2016)
Pour la Doc, c'est vers là: Documentation Gambas3 FR
didier18#11 Posté le 18/3/2014 à 18:25:13
Effectivement le NEW fait tout (plus de message d'erreur)! Pas si beugué que ça la crevette... Faut juste lui écrire correctement 2 problèmes résolu en 1 fois Bravo et merci encore Reivillo.
1