Decharger des controles

monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007 - 26 juin 2004 à 10:34
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 - 26 juin 2004 à 16:12
bonjour à tous le forumeurs,

je suis hyper-débutant en visual-basic et j'ai besoin de votre aide pour un petit truc.

j'ai créé dynamiquement dans un frame un groupe de controles label.

je ne parviens pas à décharger ses controles car je ne maitrise pas la collection des controles.

je souhaite faire for each control .... unload...etc

mais il me semble que je dois déclarer un certain nombre de choses (collection, labels...) c'est là que j'ai besoin d'aide précise.

merci par avance de l'intérête que vous me porterez.

jeanlulu

6 réponses

cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
26 juin 2004 à 11:08
utilise plutot le for next

for i = 1 to nb de label
unload label(i)
next i

bonne prog
liquide
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
26 juin 2004 à 12:34
Salut,
Tu le crées comment ton groupe de controles label ?
De là vient la solution.

Cordialement

CanisLupus
0
monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007
26 juin 2004 à 14:10
Pour répondre à liquide, le nombre de controle est variable
il est vrai que je peux definir une variable n_max_controle,
mais je recherhce une solution plus elegante qui plus est, me fera progresser dans la compréhension des collections de controles.

Pour répondre à CanisLupus,

le controle label(0) est dans un frame sur une feuille mdi
les controles suivants sont chargés si le test conditionnel est vrai.

Private Sub draw_grid()
Dim i, h, j
i Label(0).Top: h Label(0).Height

j = 0 'index du controle

For X = 1 To 29 'associeé aux lignes
For Y = 1 To 5 'associé aux colonnes
If cell(X, Y) <> "" Then '
j = j + 1
Load Label(j)
With Label(j)
.Top = i + (X - 1) * h
.Caption = cell(X, Y)
.Visible = True
.Left = Label(0).Left + (Y - 1) * 800

End With
End If
Next
Next

End Sub
0
cs_liquide Messages postés 1016 Date d'inscription samedi 22 mars 2003 Statut Membre Dernière intervention 24 juin 2008
26 juin 2004 à 14:22
je suis d'accord pour l'élégance, mais il est facile de récupérer le nombre de label :

label1.count -1

donc : for i = 0 to label1.count-1

pour le for each, et mise a part si je me trompe, je pense qu'il va parcourir tous tes objets, si tu en a beaucoup et qu'ils n'ont pas besoin dêtre "capter" dans la boucle, je ne suis pas sur que tu gagnes du temps.

sinon :
Dim Obj As Object
            For Each Obj In Parent.Controls'(ou "in Parent")
                If TypeOf Obj Is Label and Obj.Index <> 0 Then
                        Unload Obj
                End If
            Next Obj


ce code n'est pas testé, mais l'idée est le je pense.

bonne prog
liquide
0

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

Posez votre question
monsieurlemouche Messages postés 102 Date d'inscription lundi 29 décembre 2003 Statut Membre Dernière intervention 28 juin 2007
26 juin 2004 à 14:40
merci liquide pour le temps que tu me consacres,

je vais tester tes suggestions et te ferais part du résultat.

pour le moment, je vais faire fonctionner l'affaire avec une variable qui stockera le nombre de controls et utiliser un for...next

jeanlulu
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 18
26 juin 2004 à 16:12
Dim i As Control

For Each i In Controls ' ou Form1.Controls
If i.Name = "Label" Then
If i.Index > 0 Then Unload i
End If
Next

c assez élégant ?

je teste si l'index est > 0 car on ne peut décharger le controle qui n'est pas créé dynamiquement.

Cordialement

CanisLupus
0