IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

Ajouter des Controles automatiquement dans une collection


Sujet :

VB 6 et antérieur

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut Ajouter des Controles automatiquement dans une collection
    Bonjour,

    J'ai actuellement un programme qui me rajoute tous les UserControles présent dans ma Form dans une collection de manière manuelle et je souhaite le faire de manière automatique. Alors j'ai déjà des pistes sur comment le faire mais j'ai des doutes que sa marche.

    Code dans ma Form dans load:
    Code dans une classe qui représente la procédure PopullateEQT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub PopullateEQT()
        Dim nbShape As Integer
        Dim i As Integer
        Dim S1 As Shape
        nbShape = Form1.Shapes.Count
        For i = 1 To nbShape
            Set S1 = Form1.Shapes.Item(i)
            If (Not S1 Is Nothing) Then
                If S1.Type <> msoFormControl Then
                    Call AjouterEQT(S1.Name, S1)
                End If
            End If
        Next i
    End Sub
    La procédure AjouterEQT enregistre seulement mon UC dans une collection avec comme clé, le nom du UC. Je vais pas mettre ici cette procédure car elle marche déjà en mode manu.

    Par contre ma "Form1" ne reconnais pas le Shapes, j'ai voulu avoir vos suggestions pour remplacer la partie "Shapes" par qqc de plus approprié et revoir le code de la procédure PopullateEQT s'il le faut.

    PS: Je rappel que la plus par des UC présents dans mon Form sont des Shapes créer par mon tuteur de stage.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Alors j'ai réussi à avancer un peu dans ma procédure :

    Déjà le type Shape est remplacé par Variant ou Object, ensuite peu directement obtenir le nombre de contrôle dans mon Form (attention, ici Form = Teste) et pour finir j'ai un problème pour déterminer si un Control est issu de la boite à outil par défaut ou si c'est un UC réaliser par mon tuteur, je sais pas comment faire la différence surtout que ici S1 qui est en faite un UC ne possède aucune propriété "Type" ou autre qui permet de faire la différence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Sub PopullateEQT()
        Dim nbShape As Integer
        Dim i As Integer
        Dim S1 As Variant
        nbShape = Teste.Count
        For i = 1 To nbShape
            Set S1 = Teste.Controls(i)
            If (Not S1 Is Nothing) Then
                If S1.Type <> Timer Then
                    Call CreerEqt(S1.Name, S1)
                End If
            End If
        Next i
    End Sub
    PS: je rappel que de mon Teste j'ai juste deux UC et un Timer, voila pourquoi j'ai mi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If S1.Type <> Timer Then
    pour gagner du temps mais réellement je souhaite juste savoir si un Control mérite sa place dans ma collection ou pas.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    J'aurai voulu savoir s'il existe pas une méthode sur les Control ou dans la Form que je pourrais mettre dans ma boucle If qui me détermine si un Control est un UserControl ou pas et qui répond par False ou True ?

    PS:

    Je sens que je brule, j'ai reussi a modifier mon code pour vérifier si le Type de S1 est un UserControl mais sa marche pas alors j'ai mi Control :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            If (Not S1 Is Nothing) Then
                If TypeOf S1 Is Control Then
                    MsgBox ("tutu")
                '    Call CreerEqt(S1.Name, S1)
                Else
                    MsgBox ("titi")
                End If
            End If
    Vos Suggestions ???

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    263
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 263
    Points : 148
    Points
    148
    Par défaut
    Alors voila ma première solution mais je pense que je peux essayer de faire mieux, je pense qu'il doit exister un Type qui me permet de définir si c'est un control par défaut ou si c'est un usercontrol !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            If (Not S1 Is Nothing) Then
                If TypeOf S1 Is Timer Or TypeOf S1 Is Label Or TypeOf S1 Is TextBox Or TypeOf S1 Is CommandButton Or TypeOf S1 Is OptionButton Or TypeOf S1 Is CheckBox Then
                    MsgBox ("tutu")
                '    Call CreerEqt(S1.Name, S1)
                Else
                    MsgBox ("titi")
                End If
            End If
    Inconv de ma solution, je dois mettre tous les types qui existe par défaut dans ma boucle If "TypeOf ...."

    Voila ma solution quasi final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Public Sub PopullateEQT()
        Dim nbShape As Integer
        Dim i As Integer
        Dim S1 As Variant
        nbShape = Teste.Count
        For i = 0 To nbShape - 1
            Set S1 = Teste.Controls(i)
            'if s1.object =
            If (Not S1 Is Nothing) Then
                If TypeOf S1 Is VBControlExtender Then
                    MsgBox ("tutu")
                '    Call CreerEqt(S1.Name, S1)
                Else
                    MsgBox ("titi")
                End If
            End If
        Next i
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajouter des sous titres dans une combo box
    Par Djaiffe dans le forum VB.NET
    Réponses: 5
    Dernier message: 24/05/2018, 17h55
  2. Colorer des mots automatiquement dans une richtextbox
    Par ghost emperor dans le forum Windows Forms
    Réponses: 8
    Dernier message: 21/05/2008, 12h28
  3. Méthode non acceptée : ajout d'un objet dans une collection
    Par Nzs26 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 09/11/2007, 20h31
  4. Ajouter des nouvelles données dans une table
    Par Lingo dans le forum Access
    Réponses: 7
    Dernier message: 27/10/2006, 14h58
  5. Réponses: 1
    Dernier message: 13/09/2006, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo