Ce sujet est résolu.
1 | |||
Auteur | Messages | ||
---|---|---|---|
LanoueC | #1 Posté le 17/9/2010 à 17:43:00 | ||
Bonjour j'ai un tableau de picture box crée dans ma form Public tabFORM As New PictureBox[indice] je le rempli dans form_open : c ok declaration de la class dans la form hVoirTableau as new voirTableau dans la class : voirTableau deux fonctions se servent de ce tableau qui doit prendre la valeur de départ au niveau de fom_open donc, dans la class je crée un tableau public tel que : Public tabCLASS As New PictureBox[indice] Comment faire pour que ce tableau tabCLASS soit initialisé avec la valeur de tabOBJECTIF ? dans la form faire hVoirTableau.tabCLASS = tabFORM ? j'ai essayé mais ce n'est pas bon a priori! ==>il y a bien la solution , à partir de la class de faire Form.tabFORM : ca évite de recréer un tableau tabCLASS, mais j'aurai préferé faire sans avoir à modifier le tableau de la form! j'espère avoir été assez explicative | |||
Prokopy | #2 Posté le 17/9/2010 à 18:30:00 | ||
Kinder Pingui | Si j'ai bien compris, tu as un tableau dans ton formulaire (tabFORM) que tu souhaites utiliser pour initialiser ton autre tableau (tabCLASS). Dans la classe, il faut juste que tu crées un objet de type tableau "vide", et tu lui affectes le tableau tabFORM :
Voilà. La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi. | ||
LanoueC | #3 Posté le 17/9/2010 à 22:03:00 | ||
merci Prokopy c'est bien ce que j'avais essayé de faire mais quand je déclare pour initialiser Public tabCLASS As PictureBox[] = Form.tabFORM form.tabFORM ne prend pas ! apres avoir taper form puis . l'indentation ne se met pas en place comme si ce n'etait pas reconnu par contre si je fais form.tabFORM à l'intérieure d'une des fonctions de la class alors c OK ! mais j'ai besoin d'une iniitialisation avant l'utilisation des fonctions de même entre deux class ==> initialisation impossible ex : tabCLASS2 as new integer[] = class1.tabCLASS1 c pas ok par conte là aussi c ok à l'intérieure des fonctions! | |||
Prokopy | #4 Posté le 17/9/2010 à 22:32:00 | ||
Kinder Pingui | Ah oui oups, parlé trop vite … L'initialisation de ta variable doit se faire dans le constructeur de ta classe, c'est-à-dire la fonction _new() :
Ça devrait mieux marcher comme ça. La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi. | ||
LanoueC | #5 Posté le 17/9/2010 à 23:09:00 | ||
ah oui effectivement l'initialisation fonctionne bien merci prokopy question autre : est il possible de créer un tableau de pictureBox à partir d'une class? 'class Public tbl As New PictureBox[10] public sub creationPictureBox() for i = 0 to 9 tbl = New PictureBox(Panel1Parcours) next end pour l'instant j'ai pas réussi! en fait je voudrais re-organiser mon petit prog et mettre un maximum en class afin que je puisse m'en resservir ailleurs! | |||
Prokopy | #6 Posté le 18/9/2010 à 07:54:00 | ||
Kinder Pingui | Créer un tableau de PictureBox à partir d'une classe ? Tu veux dire créer ta propre classe PictureBox[] ? Dans ce cas c'est simple, il te suffit d'hériter ta classe de PictureBox[], en mettant au début de ta classe :
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi. | ||
gambix | #7 Posté le 19/9/2010 à 16:18:00 | ||
Faire simple ! | oui lanouec... ça ressemble a une classe d'encapsulation ça ' Gambas class file 'Class C9Case Public Sub _New(hCont As Container) Dim hPicBox As PictureBox Dim i, j As Integer For i = 0 To 2 For j = 0 To 2 hPicBox = New PictureBox(hCont) As "PicBox" hPicBox.Move((hCont.ClientWidth / 3) * i, (hCont.ClientHeight / 3) * j, hCont.ClientWidth / 3, hCont.ClientHeight / 3) hPicBox.Border = Border.Sunken Next Next End Public Sub PicBox_Enter() Last.BackGround = Color.Yellow End Public Sub PicBox_Leave() Last.BackGround = Color.Transparent End '========================== Utilisation 'Form Public sub Form_Open() dim hClass as C9Case = new C9Case(ME) end et hop j'ai 9 cases et c'est une classe réutilisable dans tout projet et dans tout type de container. c'est parfoit plus pratique qu'un heritage. Moins de texte dans une signature c'est agrandir son espace. | ||
LanoueC | #8 Posté le 19/9/2010 à 19:52:00 | ||
ouaaiiiii c'est génial comme çà merci Gambix Mais une précision : comment faire si je veux changer par exemple la couleur de fond mais pas avec un évènement souris , au cours du déroulement du programme? if hpicbox.tag = 5 then hpicbox.background = color.blue? a moins de remprendre ce que tu as écris et de faire un tableau de picbox? Dim hPicBox As new PictureBox Dim i, j As Integer For i = 0 To 2 For j = 0 To 2 hPicBox = New PictureBox(hCont) As "PicBox" hPicBox.Move((hCont.ClientWidth / 3) * i, (hCont.ClientHeight / 3) * j, hCont.ClientWidth / 3, hCont.ClientHeight / 3) hPicBox.Border = Border.Sunken inc i Next Next | |||
LanoueC | #9 Posté le 19/9/2010 à 22:07:00 | ||
j'ai bien trouvé cela : For Each PicBox In hcontainer.Children If PicBox.Tag > 2 Then picBox.Background = color.blue Next mais cela oblige de repasser à chaque fois par la boucle for each ! une simple dénomination comme picBox n° i : j'ai pas réussi | |||
gambix | #10 Posté le 20/9/2010 à 11:43:00 | ||
Faire simple ! | oui soit tu passe par un tableau... que tu appelle via ta classe avec un _get par exemple. Public function _Get(Value as integer) as PictureBox return aPicBox end mais si j'en savait plus sur ton programme je suis certain qu'il y a de grande chance pour que tu n'ai pas a appeller les picbox directment ... souvent les event et Last suffisent. Pour l'utilisation de get ensuite Private hCPic as C9Case Public sub Form_Open() hCpic = New C9Case(Me) hCPic[2].BackGround = Color.Blue end Moins de texte dans une signature c'est agrandir son espace. | ||
LanoueC | #11 Posté le 20/9/2010 à 17:32:00 | ||
Bonjour ou soir OK j'ai bien réussi à créer un tableau de pictureBox à partir d'une class mais l'accès à ce tableau depuis la form est quelque peu confus pour moi voilà ce que j'ai fais : dans form *déclaration : Public TabClassPic As New ClassPic[nbreMax] * appel : TabClassPic = New ClassPic(Panel1) dans ClassPic *déclaration : Public tableau As New PictureBox[nbreMax] * public SUB _new(hcontainer as container) dim i as integer for i = 0 to nbreMax -1 tableau = New PictureBox(hcontainer) As "foto" tableau.picture = picture.load("image1.jpg") etc.... end L'accès à tableau depuis la Class ne pose aucun souci l'accès au tableau depuis la form oui : si depuis la form je fais : TabClassPic.tableau[20].picture = picture.load("toto") : C OK si je fais depuis la form : dim toto as picture = picture.load("toto") for j = to to TabClassPic.tableau.max if TabClassPic.tableau[j].picture = toto then listBox.add("ok") : resultat listbox vierge alors que toto est là next OU bien avec dans form un autre tableau telque : Public tableau2 As New PictureBox[nbreMax] For j = 0 To TabClassPic.tableau.Max tableau2[j] = New PictureBox(Panel2) tableau2[j].Picture = TabClassPic.tableau[j].Picture : resultat = erreur reference d'objet NULL Next en fait l'accès aux pictures des pictureBox est impossible j'ai rajouté dans la class : _get comme tu me disais mais là , ben çà ne change rien Public Function _get(Value As Integer) As PictureBox Return tableaul End je voudrais pouvoir accéder aux picture des picturesBox de ce tabClassPic.tableau à partir de la form mais aussi d'autres class LanoueC Merci | |||
gambix | #12 Posté le 20/9/2010 à 17:52:00 | ||
Faire simple ! | déja pour la comparaisont des picture du doit passer par un tampon ou par la comparaison des chemin des picture (stocké dans le tag par exemple) pour le tempon PictureBox.Picture = Picture["chemin"] va en quelque sorte stocké une reférence a l'objet picture dans la classe picture si on rappelle Picture["chemin"] ça va nous retourner un référence a l'objé déja créé (si le fichier source n'a pas changé. dans ce cas on peu comparer les reference if picturebox.picture = Picture["toto"] then ... mais je le déconseille ... il vaut mieux comparer des chemin ou des reference. Moins de texte dans une signature c'est agrandir son espace. | ||
LanoueC | #13 Posté le 20/9/2010 à 20:24:00 | ||
MERCI gambix ben c'est impecc, il me reste que a changer les déclarations des pictures comme cela! Bonne soirée à tous LanoueC | |||
1 |