OVH Cloud OVH Cloud

Difference entre Container et Parent

4 réponses
Avatar
Joaquin Cuenca Abela
Bonjour,

J'aimerais connaître quelle est la difference entre les propriétés Container
et Parent d'un contrôle.

Dans certains cas elles sont differentes. Par exemple, dans un label qui se
trouvé à l'interieur d'un SSTab qui est a son tour à l'interieur d'un Form,
le Container du label est le SSTab, alors que son Parent est le Form.

Merci !

4 réponses

Avatar
Zoury
Salut Joaquin! :O)

(traduction presque tel quel de l'aide)
Container renvoit le nom du contrôle dans lequel un contrôle est contenu.
Parent renvoit le nom du formulaire, de l'object ou de la collection
contenant un contrôle, un autre objet ou d'une collection.

La nuance est subtile.. :O)

pour un test rapide,
'***
' Form1
' 1 PictureBox
' 1 CommandButton (dans le PictureBox)
' 1 CommandButton (sur le formulaire)
Option Explicit

Private Sub Form_Load()

Dim ctl As Control

For Each ctl In Me.Controls
Debug.Print ctl.Name & ".Parent.Name = """ & ctl.Parent.Name & """"
Debug.Print ctl.Name & ".Container.Name = """ & ctl.Container.Name &
""""
Next ctl

End Sub
'***

résultats :
Command1.Parent.Name = "Form1"
Command1.Container.Name = "Form1"
Picture1.Parent.Name = "Form1"
Picture1.Container.Name = "Form1"
Command2.Parent.Name = "Form1"
Command2.Container.Name = "Picture1"

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

"Joaquin Cuenca Abela" a écrit dans le message de
news:40fe7586$0$4213$
Bonjour,

J'aimerais connaître quelle est la difference entre les propriétés


Container
et Parent d'un contrôle.

Dans certains cas elles sont differentes. Par exemple, dans un label qui


se
trouvé à l'interieur d'un SSTab qui est a son tour à l'interieur d'un


Form,
le Container du label est le SSTab, alors que son Parent est le Form.

Merci !




Avatar
Joaquin Cuenca Abela
"Zoury" wrote in message
news:%23oa%23Oh%
Salut Joaquin! :O)

(traduction presque tel quel de l'aide)
Container renvoit le nom du contrôle dans lequel un contrôle est contenu.
Parent renvoit le nom du formulaire, de l'object ou de la collection
contenant un contrôle, un autre objet ou d'une collection.



Merci pour ta reponse, mais je n'arrive toujours pas a saisir la difference
dans l'explication.
D'abord, moi dans l'aide j'ai seulement (dans le Object Browser):

Parent -> Returns the object on which this object is located.
Container -> Returns the container of an object.

Je comprends bien la definition que t'as donné pour Container, mais je
n'arrive pas a voir la difference avec Parent.
Parent renvoit le nom du formulaire, de l'objet ou de la collection
contenant un [le ?] contrôle, un autre objet [?] ou d'une [?] collection.

Puisqu'un contrôle est aussi un objet, on dirait que la definition de
Container est un cas special de la definition de Parent.

La nuance est subtile.. :O)

pour un test rapide,


[snip]

Oui, en faissant un test, j'ai aussi remarqué que le Parent d'un objet O1
est l'object O2 qui contient O1 dans ses "Controls" (en gros, le Form).
Mais je ne comprends pas pourquoi en lisant la description de Parent.

Une question liée, y-a-t'il un moyen d'obtenir une liste des objets
"contenus" dans un contrôle ?
Si les propriétés Controls -> Parent établisent un rapport "fils - père" (on
peut dire que pour tout i, p.Controls[i].Parent == p), existe-t-il une
propriété analogue à Controls qui forme avec "Container" un rapport "fils -
père" ? (c'est-à-dire, tel que pour tout i, p.XXX[i].Container == p).

Merci !
Avatar
Zoury
comme je disais le différence est subtile... :O/

> Parent renvoit le nom du formulaire, de l'object ou de la collection
> contenant un contrôle, un autre objet ou d'une collection.



supposons un objet o.
si o est un contrôle, un objet de type X ou une collection, il y a des
chances que o est le propriété Parent.
ex :
'***
Dim o As MyControl
Debug.Print o.Parent.Name
'ou
Dim o As MyObject
Debug.Print o.Parent.Name
'ou
Dim o As MyCollection
Debug.Print o.Parent.Name
'***

dans le cas ou o aurait une propriété Parent, la valeur retourné par
celle-ci peut-être un formulaire, un autre objet ou une collection.
ex :
'***
Dim o As MyControl
Debug.Print o.Parent.Name ' nom du formulaire
'ou
Dim o As MyObject
Debug.Print o.Parent.Name ' nom de l'objet parent
'ou
Dim o As MyCollection
Debug.Print o.Parent.Name ' nom de la collection parente
'***

Dans le cas d'un contrôle, le Parent sera toujours le formulaire qui le
contient (du moins j'ai jamais vu l'inverse). C'est le formulaire qui
s'occupe de charger et détruire les contrôles, c'est donc lui le Parent. Un
Container quant à lui ne fait que tenir un contrôle, il n'est pas
responsable de sa durée de vie si on veut.

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
Zoury
j'ai oublié une p'tite partie de question .. :O)

Une question liée, y-a-t'il un moyen d'obtenir une liste des objets
"contenus" dans un contrôle ?



Le formulaire offre une collection de contrôles :

liste les contrôles du formulaire :
'***
Private Sub PrintControls()

Dim ctl As Control

For Each ctl in Me.Controls
Debug.Print ctl.Name
Next ctl

End Sub
'***

maintenant si tu veux lister les contrôles contenus dans PictureBox1 :
Private Sub PrintControls()

Dim ctl As Control

For Each ctl in Me.Controls
If (ctl.Container Is PictureBox1) Then
Debug.Print ctl.Name
End If
' on peut aussi tester avec
' ctl.Container.Name = "PictureBox1"
' mais c'est plus lent..
Next ctl

End Sub


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/