Controls en VB6

Résolu
jpmaton Messages postés 67 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 26 septembre 2023 - 15 août 2008 à 12:23
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 16 août 2008 à 13:05
Bonjours,
Via la Collection CONTROLS, j'ai accès au nom des contrôles mais si ceux-ci son en "groupes", comment avoir aconnaissance des indices.
ex : groupe valeur(1), valeur(2), valeur(3) ... :  ctlc(i).Name donnera "valeur" à chacun mais pas l'indice
Merci de l'aide et ... bon WE à tous.
Jean-paul
' ---------------------------
sub nom_controles()
       dim ctlc(), nbControles as integer
        nbControles = Me.Controls.Count - 1
        ReDim ctlc(nbControles)
        For i = 1 To nbControles
            Set ctlc(i) = Me.Controls(i)
            Debug.Print ctlc(i).Name
        Next i
end sub

6 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
15 août 2008 à 13:15
Salut,

Il s'agit de la propriété Index des contrôles.
______________________________________
DarK Sidious
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
15 août 2008 à 14:45
salut,

une manière parmis d'autres, mais je n'en connais pas de plus propre pour la gestion d'index (c'est à dire sans gestion d'erreur)
à noter qu'ici on ne stoque que le nom, pas l'objet

Option Explicit
Dim oCtrls As New Collection
    
Sub ListControls()
    Dim oCtrl As Object, iIndex As Integer
    
    On Error Resume Next
    For Each oCtrl In Me.Controls
'       collection?
        iIndex = oCtrl.Index
        If Err.Number = 343 Then
'           contrôle simple
            oCtrls.Add oCtrl.Name
            Err.Clear
        Else
'           dans un
groupe
            oCtrls.Add oCtrl.Name & "(" & CStr(iIndex) & ")"
        End If

         Debug.Print oCtrls.Item(oCtrls.Count)
    Next oCtrl
    
    Debug.Print "-------------"
    Debug.Print CStr(oCtrls.Count) & "
contrôle(s)"
End Sub

Private Sub Command1_Click()
    Call ListControls
End Sub

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
3
jpmaton Messages postés 67 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 26 septembre 2023 3
16 août 2008 à 10:18
Merci,

Ce code est OK.
Je sauve ainsi les noms des contrôles (et leur index) et les valeurs ou textes dans un fichier séquentiel.

Exemple :fichier : "a" Name / "b"type texte ou valeur /  "c" = .value ou .text

"comboNNIS","T","2"
"optCloture(2)","V",#FALSE#
"optCloture(1)","V",#FALSE#
"optCloture(0)","V",#TRUE#
"ComboMois","T","janvier"
"ComboAnnee","T","2008"
"NoAdministratif","T",""







Mais pour la récupération j'ai encore des soucis.

            Input #2, a, b, c
                If b = "T" Then
                    me.Controls(a).Text = c
                Else
                    me.Controls(a).Value = c
                End If
            End If

Ca ne marche pas pour les "groupes"
-> Erreur 730 : controle


"optCloture(2)" introuvable
Je rame....
Il y a moyen via les indices des controles


me.Controls(1 ou 2 ou etc).Value mais je voudrais faire mon fichier séquentiel avec les .Name et non les indices des contrôles.




Merci de l'aide
Jean paul
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
16 août 2008 à 10:24
Salut,

Ouch, il serait bien plus simple d'utiliser un fichier ini, un fichier xml, ou une base de données pour enregistrer les paramètres de ton programme plutôt que de tout faire à la main !
______________________________________
DarK Sidious
0

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

Posez votre question
jpmaton Messages postés 67 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 26 septembre 2023 3
16 août 2008 à 11:02
Re bonjour,
J'envoie ci-après tout mon code
Sur la form il y a :
- 2 cmd : sauver et charger
- un groupe de 2 boutons option
- un textbox
Merci pour l'aide

---------------------------------------------------
Dim oCtrls As New Collection
   
Private Sub charger_Click()
    Open App.Path + "/parametres.txt" For Input As #1
        For I = 1 To Me.Controls.Count
            Input #1, a, b, c
            If b = "T" Then
                Me.Controls(a).Text = c
            Else
                Me.Controls(a).Text = c
            End If
        Next I
    Close #1

End Sub

Sub sauver_click()
    Dim oCtrl As Object, iIndex As Integer
 
    Open App.Path + "/parametres.txt" For Output As #1
    On Error Resume Next
    For Each oCtrl In Me.Controls
'       collection?
        iIndex = oCtrl.Index
        If Err.Number = 343 Then
'           contrôle simple
            oCtrls.Add oCtrl.Name
            Err.Clear
        Else
'           dans un groupe
            oCtrls.Add oCtrl.Name & "(" & CStr(iIndex) & ")"
        End If

         Debug.Print oCtrls.Item(oCtrls.Count)
        
        If TypeOf oCtrl Is TextBox Or TypeOf oCtrl Is ComboBox Then
            Write #1, oCtrls.Item(oCtrls.Count), "T", oCtrl.Text
        ElseIf TypeOf oCtrl Is CheckBox Or TypeOf oCtrl Is OptionButton Then
            Write #1, oCtrls.Item(oCtrls.Count), "V", oCtrl.Value
        End If
        
    Next oCtrl
    Close #1
End Sub
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 août 2008 à 13:05
[codes/ENREGISTRER-APPLIQUER-PARAMETRES-FORM-LIGNES-CTL_35970.aspx ENREGISTRER ET APPLIQUER LES PARAMÈTRES D'UNE FORM EN 2 LIGNES [CTL]]




<hr size="2" width="100%" />
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp

 
0
Rejoignez-nous