Controls en VB6 [Résolu]

Messages postés
49
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
8 août 2019
- - Dernière réponse : PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
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
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
83
3
Merci
Salut,

Il s'agit de la propriété Index des contrôles.
______________________________________
DarK Sidious

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 204 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
28
3
Merci
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  

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 204 internautes nous ont dit merci ce mois-ci

Commenter la réponse de PCPT
Messages postés
49
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
8 août 2019
1
0
Merci
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
Commenter la réponse de jpmaton
Messages postés
15815
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
83
0
Merci
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
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
49
Date d'inscription
mardi 17 mai 2005
Statut
Membre
Dernière intervention
8 août 2019
1
0
Merci
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
Commenter la réponse de jpmaton
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
28
0
Merci
[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

 
Commenter la réponse de PCPT