Comment connaître le nom d'un contrôle ?

Résolu
beegeezzz Messages postés 152 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 10 avril 2017 - 28 janv. 2009 à 12:00
beegeezzz Messages postés 152 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 10 avril 2017 - 28 janv. 2009 à 14:14
Bonjour tout le monde,

Je passe un objet (combobox) à une fonction :

Private Sub comboTypeSupport_Click()    sql "SELECT id, nom, max_boules FROM taille_support WHERE ref_support IN (SELECT id from support WHERE id " & comboTypeSupport.ItemData(comboTypeSupport.ListIndex) & ")"
    BDRemplirListe sql, comboTailleSupport
End Sub


Voici la fonction :

Public Sub BDRemplirListe(ByVal sql As String, ByRef Liste As Control)
    Dim rsTable As Recordset
    
    If (TypeOf Liste Is ListBox) Or (TypeOf Liste Is ComboBox) Then
        Set rsTable = BD.OpenRecordset(sql, dbOpenSnapshot)
        Liste.Clear
        While Not rsTable.EOF
            
            Liste.AddItem rsTable(1) & " (" & rsTable(2) & " boules)"
            Liste.ItemData(Liste.NewIndex) = rsTable(0)
            rsTable.MoveNext
        Wend
    End If
End Sub


Je voudrais savoir comment je peux connaîre le nom de la liste (name) passée en paramètre ?

J'aimerais mettre un if en disant :

SI le nom est A alors :

Liste.AddItem rsTable(1) & " (" & rsTable(2) & " boules)"

autrement

Liste.AddItem rsTable(1)

Merci d'avance pour l'aide.

beegees

4 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
28 janv. 2009 à 14:04
pas d'accord avec jmf0

très bonne habitude que de teste le TypeOf
en effet, tu demande un Control, ca évite tout accident.
(ajoutes un Else avec une injureBox qui va te permettre de corriger tout manquement)

pour ta question première, fais simplement Liste.Name pour connaitre le nom du controle, tout simplement.

cependant, l'ajout de ton boolean est une bien meilleure solution. Ca évite de lier ta fonction a un cas spécifique, elle est plus réutilisable, mieux structurée.
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
28 janv. 2009 à 12:59
Bonjour,

ce n'est pas le nom du contrôle que tu dois passer, mais bien (comme tu le fais) l'objet Controle lui-m^me.
Passe-le as object.


La méthode additem agissant de la même manière pour une ListBox ou une Combobox :


- inutile d'utiliser TypeOf


- inutile de déterminer le nom du contrôle concerné

PS : je ne comprends pas la raison de ta méthode additem, plutôt que de lier ton contrôle au recordset !
0
beegeezzz Messages postés 152 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 10 avril 2017 1
28 janv. 2009 à 13:05
Bonjour,

Merci pour ta réponse.

Bon, j'ai trouvé un moyen de contourner en mettant un paramètre optionnel :

Public Sub BDRemplirListe(ByVal sql As String, ByRef Liste As Control, Optional plus As Boolean = False)
    Dim rsTable As Recordset
    
    If (TypeOf Liste Is ListBox) Or (TypeOf Liste Is ComboBox) Then
        Set rsTable = BD.OpenRecordset(sql, dbOpenSnapshot)
        
        Liste.Clear
        While Not rsTable.EOF
            If plus = True Then
                Liste.AddItem rsTable(1) & " (" & rsTable(2) & " boules)"
                Liste.ItemData(Liste.NewIndex) = rsTable(0)
                rsTable.MoveNext
            Else
                Liste.AddItem rsTable(1)
                Liste.ItemData(Liste.NewIndex) = rsTable(0)
                rsTable.MoveNext
            End If
        Wend
    End If
End Sub


Donc si je passe true, je peux ajouter ceci :

"(boules)"

Merci encore pour ton aide.

beegees
0
beegeezzz Messages postés 152 Date d'inscription mardi 4 novembre 2008 Statut Membre Dernière intervention 10 avril 2017 1
28 janv. 2009 à 14:14
Cool,

Merci pour ta réponse.

Pour une fois que je fais quelque chose de bien

beegees
0
Rejoignez-nous