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 :

Tester si un contrôle est un tableau de contrôles...


Sujet :

VB 6 et antérieur

  1. #1
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut Tester si un contrôle est un tableau de contrôles...
    Salut !

    Bon voila mon souci... J'ai plusieurs contrôles (essentiellement des Boutons et des ComboBox) placés sur ma form. Certains sont des contrôles seuls et uniques et d'autres sont regroupés en tableaux de contrôles.
    Bref, pour parcourir mon ensemble de contrôles, je fais une boucle sur la collection Form.Controls. Le rpoblème, c'est que je ne trouve pas de moyen de tester si le contrôle en cours fais partie d'un tableau ou non.
    Si je demande d'afficher c.Index, j'obtiens une erreur "Not an Array" (Normal...). N'y a t'il pas un moyen de contourner ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Dim c As Control
     
        For Each c In Form1.Controls
            If TypeOf c Is CommandButton Or TypeOf c Is ComboBox Then
                    ' Ici un pti traitement...
                    MsgBox c.Name & " " & c.Index ' Si le contrôle n'a pas d'index c'est le drame...
            End If
        Next c
    NB : J'ai essayé avec isArray(c) sans succès. Il est même impossible de faire un test sur c.Index...
    bref je suis perdu
    Merci d'avance
    +++
    Ju
    "Il y a 3 personnes en ce monde sur qui tu peux compter : moi, le pape et le cavalier solitaire ! "
    Penser à svp

  2. #2
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    La gestion des exceptions (On Error) devrait pouvoir résoudre ton problème.

  3. #3
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Je venais d'essayer... Malheureusement, soit je m'y pred mal, soit ca ne fonctionne vraiment pas...
    Voici comment j'ai procédé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        Dim c As Control
    On Error GoTo errhandler
        For Each c In Form1.Controls
            If TypeOf c Is CommandButton Or TypeOf c Is ComboBox Then
                  MsgBox c.Name & " " & c.Index           
    errhandler:
                If Err.Number = 343 Then ' Si on tombe fasse à l'erreur "Not an Array"
                  MsgBox c.Name & " et pas d'index..."               
                End If
            End If
        Next c
    Il ne semble pas rendtrer dans mon handler car j'ai toujours l'erreur...
    J'espère que c'est moi qui m'y prend mal...

    Merci de t'être penché sur mon problème...
    +++
    Ju
    "Il y a 3 personnes en ce monde sur qui tu peux compter : moi, le pape et le cavalier solitaire ! "
    Penser à svp

  4. #4
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Tu t'es juste emmelé les crayons dans le On Error Goto. Il vaut mieux utiliser dans ton cas un On Error Resume Next. Ou alors déléguer le test à une fonction de ton cru. Voici un exemple :

    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
     
    Private Sub Command1_Click()
        Dim C As Control
     
        For Each C In Form1.Controls
            If isGroupe(C) Then
                MsgBox "Index du controle " & C.Name & " : " & C.Index
            Else
                MsgBox "Le controle " & C.Name & " n'a pas d'index"
            End If
        Next C
    End Sub
     
    Private Function isGroupe(C As Control) As Boolean
        On Error Resume Next
        isGroupe = (C.Index >= 0)
    End Function

  5. #5
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Super !!!!!! Ca à l'air de fonctionner !!!! Je vais faire des tests plus approfondis maintenant...
    Merci beaucoup !
    +++
    Ju
    PS : Etant donné que les informations sont rares sur la gestion des contrôles dynamiques... Ca ne serait pas possible de rajouter un petit Topic dans la FAQ sur ce type de problème (non pas sur l'ajout qui y est déjà mais sur la gestion/récupération de données/suppression...)?
    "Il y a 3 personnes en ce monde sur qui tu peux compter : moi, le pape et le cavalier solitaire ! "
    Penser à svp

  6. #6
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Citation Envoyé par sozie9372
    PS : Etant donné que les informations sont rares sur la gestion des contrôles dynamiques... Ca ne serait pas possible de rajouter un petit Topic dans la FAQ sur ce type de problème ?
    Biensûr que c'est possible . Les rédacteurs se font rare. Si le sujet d'interesse et que le coeur d'en dit, tu peux écrire un article sur la gestion des contrôles dynamique et nous le publieront dans la Faq

  7. #7
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    Okay ! Je vais me pencher sur le problème alors !
    +++
    Ju
    "Il y a 3 personnes en ce monde sur qui tu peux compter : moi, le pape et le cavalier solitaire ! "
    Penser à svp

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

Discussions similaires

  1. Tester si une case dans un tableau est non vide
    Par mohsenuss91 dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 28/12/2013, 16h44
  2. [Débutant] [POO] Tester si la cellule est vide dans un tableau de cellules
    Par ghada97 dans le forum MATLAB
    Réponses: 2
    Dernier message: 23/09/2013, 13h27
  3. comment tester si une case d'un tableau est vide
    Par khadi8 dans le forum Débuter
    Réponses: 7
    Dernier message: 01/05/2013, 09h13
  4. Comment tester qu'une valeur est dans un tableau ?
    Par Pierrot92320 dans le forum MATLAB
    Réponses: 3
    Dernier message: 18/04/2009, 18h59
  5. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 11h54

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