OVH Cloud OVH Cloud

Trouver tous les objets Fils d'un Frame ?

2 réponses
Avatar
Duric
Voici ce que j'essaie de faire sans succès:

Private Sub Check1_Click()
Call SetAllChildObject( Frame1, IIF(Check1.value=0,False,True) )
End Sub

Private Sub SetAllChildObject(objColl As Object, flag As Boolean)
Dim obj As Object

For Each obj In objColl '---> Erreur 438
obj.enabled = flag
Next obj
End Sub


Comment faire pour que objColl soit considéré comme une collection
d'objet?
Merci par avance pour vos éclaircicements !

2 réponses

Avatar
ng
Salut,
Voici un exemple :

Private Sub Form_Load()
Call FrameEnabled(False)
End Sub

Public Sub FrameEnabled(ByVal bEnabled As Boolean)
On Error Resume Next
Dim oOb As Object
For Each oOb In Me
If oOb.Container Is Frame1 Then
oOb.Enabled = bEnabled
End If
Next
End Sub


--
Nicolas.
http://www.ngsoft-fr.com
"Duric" a écrit dans le message de news:

Voici ce que j'essaie de faire sans succès:

Private Sub Check1_Click()
Call SetAllChildObject( Frame1, IIF(Check1.value=0,False,True) )
End Sub

Private Sub SetAllChildObject(objColl As Object, flag As Boolean)
Dim obj As Object

For Each obj In objColl '---> Erreur 438
obj.enabled = flag
Next obj
End Sub


Comment faire pour que objColl soit considéré comme une collection
d'objet?
Merci par avance pour vos éclaircicements !



Avatar
Duric
On Wed, 7 Jan 2004 21:51:13 +0100, "ng" wrote:

Salut,
Voici un exemple :

Private Sub Form_Load()
Call FrameEnabled(False)
End Sub

Public Sub FrameEnabled(ByVal bEnabled As Boolean)
On Error Resume Next
Dim oOb As Object
For Each oOb In Me
If oOb.Container Is Frame1 Then
oOb.Enabled = bEnabled
End If
Next
End Sub



Merci Nicolas,
exactement ce qu'il me fallait (Je ne l'avais pas vu dans ce sens là )
Juste une petite remarque; FrameEnabled ne prend en compte que les
objets directement reliés à lui (pas les objets contenus ds d'autres
objets).
Voici donc ma petite modif en récursif: on balaye jusque qu'à la
racine (au Form).

Private Sub CK_CropDetect_Click()
Call SetAllObjectEnabled(Frame, _
IIf(Frame.Value = 0, False, True))
End Sub

Private Sub SetAllObjectEnabled(ByRef objRef As Object, enabled As
Boolean)
Dim objColl As Object
On Error Resume Next
For Each objColl In Me
If checkRecursivContainer(objColl, objRef) = 1 Then
objColl.enabled = enabled
End If
Next objColl
End Sub

Private Function checkRecursivContainer(objColl2 As Object, objRef2 As
Object) As Byte
'Return: 1-> objColl2 dans objRef2
' 2-> objcoll2 en Dehors de objRef2 et Form atteind
On Error Resume Next
checkRecursivContainer = 0
Do
If objColl2.Container Is objRef2 Then
checkRecursivContainer = 1
Else
If TypeOf objColl2 Is Form = True Or _
TypeOf objColl2.Container Is Form = True Then
'1er Objet de la hierarchie
checkRecursivContainer = 2
Exit Do '1er Objet de la hierarchie atteint
End If
checkRecursivContainer checkRecursivContainer(objColl2.Container, objRef2)
End If
Loop Until checkRecursivContainer > 0
End Function