OVH Cloud OVH Cloud

Créer dynamiquement une forme... problème sur container

6 réponses
Avatar
SgW
Bonjour,

je souhaite créer dynamiquement une forme en lisant un fichier paramètre
j'arrive à créer mes frames et mes checkboxes mais je n'arrive pas à
attacher les checkboxes aux frames appropriées.

J'ai une forme frmTest, contenant une frame fQuery
Je lis le fichier paramètres avec les fonctions présentes dans un module
modParameters

mon souci est qu'une checkbox créée dynamiquement doit se trouver à
l'intérieur d'une frame créée dynamiquement.
je n'arrive pas à récupérer l'objet Frame afin d'assigner la propriété
Container pour mes CheckBoxes

Merci d'avance

'CODE :
Private Sub LoadInterface()
Dim cSection As New Collection, NbInformation As Long, CptSection As
Long, CptInformation As Long
Dim oFrame As VB.Frame, oCheckBox As VB.CheckBox, oSection, oInformation
Dim leftPosition As Long, midPosition As Long
'Création de la collection des Sections de Données
Set cSection = modParameters.GetDataSection
CptSection = 0
leftPosition = lLeftFrameSection
'Parcours de la collection des Sections de Données
For Each oSection In cSection
If bObjectsLoaded Then 'Récupération de la Frame déjà instanciée
Set oFrame = frmTest.Controls.Item("frame_" & oSection)
Else 'Création de la Frame
Set oFrame = frmTest.Controls.Add("VB.Frame", "frame_" & oSection)
End If
'Colle la Frame dans une autre Frame
Set oFrame.Container = frmTest.fQuery
With oFrame
.Caption = " " & oSection & " "
.Top = lTopFrameSection
.Appearance = 0
If CptSection > 0 Then
.Left = leftPosition
Else
.Left = lLeftFrameSection
End If
leftPosition = leftPosition + lWidthFrameSection +
lLeftFrameSection
'Récupération des informations de la Section Data en cours
NbInformation = modParameters.GetNbInformation(CptSection)
CptInformation = 0
'Parcours de la Collection des informations de la Section Data
en cours
For Each oInformation In GetSectionInformation(CptSection)
If bObjectsLoaded Then 'Récupération de la CheckBox
Set oCheckBox = frmTest.Controls.Item("checkbox_" &
oSection & "_" & CptInformation)
Else 'Création de la CheckBox
Set oCheckBox = frmTest.Controls.Add("VB.CheckBox",
"checkbox_" & oSection & "_" & CptInformation)
End If
'Assigne les propriétés (.Caption, .Value, ...) de la CheckBox
Call modParameters.UpdateCheckBox(oCheckBox, CptSection,
CptInformation)
With oCheckBox
.Top = lTopCheckBox + CptInformation * (lBlankCheckBox +
lHeightCheckBox)
.Left = lLeftCheckBox
.Width = lWidthCheckBox
.Height = lHeightCheckBox
End With
CptInformation = CptInformation + 1
Set oCheckBox = Nothing
Next oInformation
CptSection = CptSection + 1
.Width = lWidthFrameSection
.Visible = True
End With
Set oFrame = Nothing
Next oSection
End Sub

6 réponses

Avatar
Jacques93
Bonjour,
SgW wrote:
Bonjour,



[...]

> With oFrame

[...]

With oCheckBox
.Top = lTopCheckBox + CptInformation * (lBlankCheckBox + lHeightCheckBox)
.Left = lLeftCheckBox
.Width = lWidthCheckBox
.Height = lHeightCheckBox
End With



set oCheckBox.Container = oFrame ?

Mais je ne suis pas sur d'avoir bien compris la question.
Et je ne vois pas comment tu vas pouvoir gérer les évenements sur tes
CheckBox.

--
Cordialement,

Jacques.
Avatar
SgW
"Jacques93" a écrit :

Bonjour,
SgW wrote:
> Bonjour,

[...]

> With oFrame

[...]

> With oCheckBox
> .Top = lTopCheckBox + CptInformation * (lBlankCheckBox + lHeightCheckBox)
> .Left = lLeftCheckBox
> .Width = lWidthCheckBox
> .Height = lHeightCheckBox
> End With

set oCheckBox.Container = oFrame ?

Mais je ne suis pas sur d'avoir bien compris la question.
Et je ne vois pas comment tu vas pouvoir gérer les évenements sur tes
CheckBox.

--
Cordialement,

Jacques.




Merci de ta réponse Jacques.

Hélàs le
Set oCheckBox.Container = oFrame
ou le
Set oCheckBox.Container = frmTest.Controls.Item("frame_" & oSection)
ne fonctionnent pas

ma question est plus simplement "comment récupérer un objet controle lorsque
celui-ci a été créé de façon dynamique?"

concernant les évents, je n'en ai pas besoin donc le souci ne se pose pas,
il me faut juste connaitre l'état de la CheckBox (checked = {0,1})

bref
Avatar
Jacques93
SgW wrote:
"Jacques93" a écrit :




[...]


Hélàs le
Set oCheckBox.Container = oFrame
ou le
Set oCheckBox.Container = frmTest.Controls.Item("frame_" & oSection)
ne fonctionnent pas




Y a t-il un message d'erreur? Ou se trouve positionnné le CheckBox
Cheez moi, les deux méthodes fonctionnent.

--
Cordialement,

Jacques.
Avatar
SgW
"Jacques93" a écrit :

SgW wrote:
> "Jacques93" a écrit :
>

[...]

>
> Hélàs le
> Set oCheckBox.Container = oFrame
> ou le
> Set oCheckBox.Container = frmTest.Controls.Item("frame_" & oSection)
> ne fonctionnent pas
>

Y a t-il un message d'erreur? Ou se trouve positionnné le CheckBox
Cheez moi, les deux méthodes fonctionnent.

--
Cordialement,

Jacques.




Pas de message d'erreur autre que la fameuse boite de dialogue Debug, End
avec une Run-time Error '730' indiquant que le controle (ayant pour nom la
chaine de caractère de la .Caption) n'existe pas.
Avatar
Jacques93
SgW wrote:
SgW wrote:

"Jacques93" a écrit :



[...]

Hélàs le
Set oCheckBox.Container = oFrame
ou le
Set oCheckBox.Container = frmTest.Controls.Item("frame_" & oSection)
ne fonctionnent pas








[...]

Pas de message d'erreur autre que la fameuse boite de dialogue Debug, End
avec une Run-time Error '730' indiquant que le controle (ayant pour nom la
chaine de caractère de la .Caption) n'existe pas.




Que contient la variable oSection ?
Peux tu essayer le code suivant (simplifié) :
============================================ Private Sub LoadInterface()

Dim oFrame As VB.Frame, oCheckBox As VB.CheckBox

Set oFrame = frmTest.Controls.Add("VB.Frame", "frame_1")
Set oFrame.Container = frmTest.fQuery
oFrame.Visible = True
With oFrame
.Caption = " Ma Frame "
.Appearance = 1
.Top = 240
.Left = 240
.Width = 2000
.Height = 1500

Set oCheckBox = frmTest.Controls.Add("VB.CheckBox", "checkbox_1")
oCheckBox.Visible = True
'Set oCheckBox.Container = oFrame
Set oCheckBox.Container = frmTest.Controls.Item("frame_1")
With oCheckBox
.Caption = "MonCheckBox"
.Top = 240
.Left = 240
.Width = 1500
End With
End With
Set oFrame = Nothing
End Sub

================================================================ Voilà ce que ça donne chez moi :

http://cjoint.com/?eupjwpkfnb
--
Cordialement,

Jacques.
Avatar
SgW
oSection est ma variable de parcours de la collection
cSection

cSection est une collection contenant les labels pour mes
frames

-----Message d'origine-----
SgW wrote:
SgW wrote:

"Jacques93" a écrit :



[...]

Hélàs le
Set oCheckBox.Container = oFrame
ou le
Set oCheckBox.Container = frmTest.Controls.Item








("frame_" & oSection)
ne fonctionnent pas








[...]

Pas de message d'erreur autre que la fameuse boite de




dialogue Debug, End
avec une Run-time Error '730' indiquant que le controle




(ayant pour nom la
chaine de caractère de la .Caption) n'existe pas.




Que contient la variable oSection ?
Peux tu essayer le code suivant (simplifié) :
======================== =====================
Private Sub LoadInterface()

Dim oFrame As VB.Frame, oCheckBox As VB.CheckBox

Set oFrame = frmTest.Controls.Add


("VB.Frame", "frame_1")
Set oFrame.Container = frmTest.fQuery
oFrame.Visible = True
With oFrame
.Caption = " Ma Frame "
.Appearance = 1
.Top = 240
.Left = 240
.Width = 2000
.Height = 1500

Set oCheckBox = frmTest.Controls.Add


("VB.CheckBox", "checkbox_1")
oCheckBox.Visible = True
'Set oCheckBox.Container = oFrame
Set oCheckBox.Container = frmTest.Controls.Item


("frame_1")
With oCheckBox
.Caption = "MonCheckBox"
.Top = 240
.Left = 240
.Width = 1500
End With
End With
Set oFrame = Nothing
End Sub

======================== ========================= =========


=======
Voilà ce que ça donne chez moi :

http://cjoint.com/?eupjwpkfnb
--
Cordialement,

Jacques.
.