OBJETS à détruire vb2005express

Résolu
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 - 29 sept. 2006 à 12:56
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 - 29 sept. 2006 à 16:06
Bonjour,

Dans une procédure je crée 30 buttons comme suit:

private sub cree_boutton( ByVal nbremax AsInteger )
   Dim PBCollection AsNew Collection    
   Dim PBTemp As Button

   For

 nbre AsInteger = 1 To nbremax

      PBCollection.Add(
New Button)
      PBTemp = PBCollection(nbre)
   next nbre

End Sub

J'aimerai qu'à chaque fois que j'appelle cette SUB on détruise tous les boutons créés précement.

Merci.

14 réponses

olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
29 sept. 2006 à 15:44
DimPBCollection
AsNewCollection

Public



Sub
aff_tous_icones(

ByVal
nblig

As



Integer
)


   Dim
numcolmom

As



Integer
= 6


   Dim
decalex

As



Integer
= 326 :

Dim
decaley

As



Integer
= 22


   Dim
largcel

As



Integer
= 34 :

Dim
hautcel

As



Integer
= 34


   
   Dim
PBTemp

As
Button


   For
yyy

As



Integer
= 1

To
5


      For
xxx

As



Integer
= 1 + ((yyy - 1) * 6)

To
((yyy - 1) * 6) + 6
         PBCollection.Add(

New
Button)
         PBTemp = PBCollection(xxx)


         Dim
xp

As



Integer
= decalex + ((xxx - 1) * 32) - ((yyy - 1) * 6 * 32)


         Dim
yp

As



Integer
= decaley + ((yyy - 1) * 32)
         PBTemp.Location =

New
Point(xp, yp)
         PBTemp.Size =

New
Size(31, 31)
         PBTemp.FlatStyle = FlatStyle.Flat
         PBTemp.FlatAppearance.BorderSize = 0
         PBTemp.BackColor = Color.Transparent
         PBTemp.Text = Str(xxx)
         PBTemp.Visible =

True

         PBTemp.Parent =

Me
.relevesDataGridView


      Next
xxx


   Next
yyy
   PBCollection(30).Dispose()


End



Sub

private sub supprime
   dim obj as object
   for each obj in PBCollection
      ctype(obj, idisposable).dispose()
   next

   PBCollection.clear()

end sub
3
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
29 sept. 2006 à 14:10
PBCollection.clear

Rollerman
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
29 sept. 2006 à 14:14
çà marche pas

je pense que çà supprime que la collection mais pas les objets crées avec
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
29 sept. 2006 à 14:18
en fait je pense qu'il faudrait utiliser Dispose() pour chaque objet créé, mais je n'arrive pas à récupérer leur nom
merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
29 sept. 2006 à 14:23
Comment sais tu que ca ne marche pas ???

Sinon pour vercomax:

dim obj as object
for each obj in PBCollection 
   ctype(obj, idisposable).dispose
next

Rollerman
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
29 sept. 2006 à 14:28
Oui, bien sur, il faut faire toujours faire un Dispose pour détruire un controle.

.Clear ne fait que vider la collection, c'est à dire qu'elle efface les liens (items) vers les controles créés. En aucun cas elle détruit le controle.
De même Dispose détruit le controle, mais n'éfface pas le lien dans la collection.

Donc .Dispose sur chaque item de la collection, puis un .Clear de la collection.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
29 sept. 2006 à 14:28
merci Olixelle mais,

çà marche dans la procédure qui les a créé mais pas dans une autre.

j'ai mis ta boucle dans un boutton click et çà les détruit pas

merci, je sais pas comment faire
0
Julien237 Messages postés 883 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 3 mars 2009 7
29 sept. 2006 à 14:30
Bien sur que ca ne marche pas, une collection d'objet contient des pointeurs vers ces objets, pas les objets eux-memes...

Sinon puisque tu es en vb2005, pourquoi ne pas profiter des avantages du framework 2.0 et utiliser des Collection(Of Button)...


Julien
0
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
29 sept. 2006 à 14:42
c normal que ca ne marche pas dans une autre procédure, ta colleciton est en local....
sinon pour le coup du clear j'ai plané, désolé :)

Rollerman
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
29 sept. 2006 à 15:02
bah je pige rien de rien,

ce qui est sur, c que mes boutons sont créés et que je voudrait pouvoir les détruire à la demande d'un click sur bouton et encore, 1 particulier, par exemple le 3ème créé

merci de m'aider encore
0
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
29 sept. 2006 à 15:19
tu en fait koi de tes boutons ?
tu les mets sur un formulaire ?
si oui donnes nous ton code (entier)

Rollerman
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
29 sept. 2006 à 15:34
oui, ils sont dans un formulaire, et voici la procédure qui les crée:





Public



Sub
aff_tous_icones(

ByVal
nblig

As



Integer
)


   Dim
numcolmom

As



Integer
= 6


   Dim
decalex

As



Integer
= 326 :

Dim
decaley

As



Integer
= 22


   Dim
largcel

As



Integer
= 34 :

Dim
hautcel

As



Integer
= 34


   Dim
PBCollection

As



New
Collection


   Dim
PBTemp

As
Button


   For
yyy

As



Integer
= 1

To
5


      For
xxx

As



Integer
= 1 + ((yyy - 1) * 6)

To
((yyy - 1) * 6) + 6
         PBCollection.Add(

New
Button)
         PBTemp = PBCollection(xxx)


         Dim
xp

As



Integer
= decalex + ((xxx - 1) * 32) - ((yyy - 1) * 6 * 32)


         Dim
yp

As



Integer
= decaley + ((yyy - 1) * 32)
         PBTemp.Location =

New
Point(xp, yp)
         PBTemp.Size =

New
Size(31, 31)
         PBTemp.FlatStyle = FlatStyle.Flat
         PBTemp.FlatAppearance.BorderSize = 0
         PBTemp.BackColor = Color.Transparent
         PBTemp.Text = Str(xxx)
         PBTemp.Visible =

True

         PBTemp.Parent =

Me
.relevesDataGridView


      Next
xxx


   Next
yyy
   PBCollection(30).Dispose()


End



Sub

je les affiche sur un Datagridview et sur chaque cellule
merci
0
vercomax Messages postés 547 Date d'inscription mercredi 28 juillet 2004 Statut Membre Dernière intervention 11 septembre 2013 2
29 sept. 2006 à 16:04
nikel, merci beaucoup

en fait j'avais pas vu que je redéclarais la collection dans la procédure

merci encore
0
olixelle Messages postés 506 Date d'inscription vendredi 30 juillet 2004 Statut Membre Dernière intervention 3 mars 2008 2
29 sept. 2006 à 16:06
:)

Rollerman
0
Rejoignez-nous