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 :

Type "groupe de controles" dans une function


Sujet :

VB 6 et antérieur

  1. #1
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut Type "groupe de controles" dans une function
    bonjour,
    je souaterais entrer dans une function que je crée un groupe de controles comme paramètre.

    le problème est que je ne trouve pas comment le définir: as...?

    merci de me dire si vous avez la réponse.

    salut
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  2. #2
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Salut

    Tu as créé ton groupe de quelle manière? Avec la propriété Index d'une série de contrôles ayant le même nom?

    Exemple avec trois textBox (nommés txtTextes et indicés de 0 à 2), un bouton et un label.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Function RetournerTexte(Texte As TextBox) As String
    RetournerTexte = Texte.Text
    End Function
     
    Private Sub cmdAfficherTexte_Click()
    Static indice As Integer
    lblTexte.Caption = RetournerTexte(txtTextes(indice))
    indice = IIf(indice = 2, 0, indice + 1)
    End Sub

  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
    Salut !

    Si c'est un groupe de controles, c'est un tableau donc normalement tu peux l'utiliser comme tel (As TextBox(),...)
    +++
    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 éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    -> zazaraignée: he bien non (désolé), mon problème etais plutot de pouvoirs utiliser différents types de controles à indice.

    ->Sozie: oui, je suis d'ailleur arrivé à prsque la même conclusion cette nuit (qui m'a porté conseil).pour ta solution, elle n'est même pas accepté par l'éditeur vb. pour ma part, j'ai mis: mais j'ai ceci
    message d'erreur: incompatibilité de type: tableau ou type attendu par l'utilisateur.
    et il me surligne dans:
    Call Debog(Balle1, Obstacle, Me)
    si vous avez des idées

    merci a tous
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  5. #5
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    J'ai jeté un oeil, je pensais que ce serait plus simple que ça (mieux géré par VB, je veux dire ...)

    Après avoir bidouillé un peu, voilà ce que j'ai réussi à faire :
    Dans une feuille Form1 contenant :
    - 3 textBox, 2 nommées Text1 (indice 0 et 1) et une nommé Text2,
    - un bouton Command1,
    j'ai placé le code suivant :
    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
    Private Sub remplitMesTextBox(frmA As Form, nomCtrl As String)
        Dim i As Integer
     
        For i = 0 To frmA.Controls.Count - 1
            If TypeOf Controls(i) Is TextBox Then
                If Controls(i).Name = nomCtrl Then
                    Controls(i).Text = "remplit !"
                End If
            End If
        Next i
    End Sub
     
    Private Sub Command1_Click()
        remplitMesTextBox Me, "Text1"
    End Sub
    Et ça fonctionne !

    Tu peux donc intervenir sur le groupe de contrôle désiré. En affinant (je n'ai pas le temps, sorry), on doit pouvoir intervenir sur les index souhaités avec Controls(i).Index : attention, cette propriété renvoie un erreur si l'on n'est pas sur un groupe de contrôles !
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  6. #6
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Ha! oui, évidemment! Brillant, Xo!

    On a fait quelque chose de semblable en classe, en Delphi. Savais pas qu'on pouvait faire ça de manière presqu'identique en VB... J'avais essayé, sans succès... Faut croire que je ne m'y prenais pas de la bonne façon.

  7. #7
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    Bravo xo! :o

    j'aivais envisagé un moment d'utiliser le nom mais j'avais rien trouvé

    donc félicittion.

    c'est quand même incroyable qu'ils aient rien prévu pour gérer les groupes.
    poste ça dans la faq, ça le merite.

    merci à tous les autres.

    salut
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  8. #8
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    Oups, j'ai parlé trop vite : ton code marche trés bien de manière normale avec un code normal mais en essayant d'adapter ton code à mon programme, je suis tombé sur un nouveau hic: voila mon code (coord et dezone sonts des type pesonalisés, define est une fonctin):
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Public Function Debog(balo As Control, Obstacl As String, Form As Form)
    Dim bal As DefZone
    Dim obs As DefZone
    Dim foc As Coord
    Dim i As Integer
    Dim a As Integer
    foc.Y = Form.Height / 2
    foc.X = Form.Width / 2
    bal = Defin(balo)
    For a = 0 To Form.Controls.Count - 1
        If TypeOf Controls(a) Is Shape Then
            If Controls(a).Name = Obstacl Then
                Do
                    For i = 0 To ObsMax
                        obs = Defin(Controls(a)(i))
                        If bal.Center.X < obs.Right And bal.Center.X > obs.Left And bal.Center.Y > obs.Top And bal.Center.Y < obs.Down Then
                            If Not Round(balo.Center) = Round(foc) Then
                                balo.Top = balo.Top + (Form.Height / 2 - bal.Center.Y) / 4
                                balo.Left = balo.Left + (Form.Width / 2 - bal.Center.X) / 4
                            Else
                                balo.Top = balo.Top + 250
                                balo.Left = balo.Left + 250
                            End If
                        Else
                            Exit sub
                        End If
                    Next i
                Loop
            End If
        End If
    Next a
    End Function
    Forcément, en rajoutant ça, le code est plus comliqué...

    OU est l'erreur : (et charlie, vous le trouvez? )

    il me dit
    Procédure sub ou function non définie
    et me surligne
    If TypeOf Controls(a) Is Shape Then
    si vous avez une idée...

    merci!
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Cette fonction n'est pas dans le code de la form ? , un module à part ?

    à la place de met
    pour garder référence à la form...


    ou bien utilise une boucle For each...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     dim c as control
    for each c in form.control 
      If TypeOf c Is Shape Then 
    ...
    next

  10. #10
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    merci bbil.

    j'ai maintenant un autre bug: dans le code qui est maintenant:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Public Function Debog(balo As Control, Obstacl As String, Form As Form)
    Dim bal As DefZone
    Dim obs As DefZone
    Dim foc As Coord
    Dim i As Integer
    Dim a As Integer
    foc.Y = Form.Height / 2
    foc.X = Form.Width / 2
    bal = Defin(balo)
    For a = 0 To Form.Controls.Count - 1
        If TypeOf Form.Controls(a) Is Shape Then
            If Form.Controls(a).Name = Obstacl Then
                Do
                    For i = 0 To ObsMax
                        obs = Defin(Form.Controls(a)(i))
                         'if replace(eceheaereleieee,"e","").found= true then msgbox replace (replace("jtaeso lso'atai tsorotausovéta", "ta",""),"so","")
                        If bal.Center.X < obs.Right And bal.Center.X > obs.Left And bal.Center.Y > obs.Top And bal.Center.Y < obs.Down Then
     
                            If Not Round(balo.Center) = Round(foc) Then
                                balo.Top = balo.Top + (Form.Height / 2 - bal.Center.Y) / 4
                                balo.Left = balo.Left + (Form.Width / 2 - bal.Center.X) / 4
                            Else
                                balo.Top = balo.Top + 250
                                balo.Left = balo.Left + 250
                            End If
                        Else
                            GoTo Norm
                        End If
                    Next i
                Loop
            End If
        End If
    Next a
    Norm:
    End Function
    il me dit:
    Type d'argument ByRef incompatible
    en me surlignant:
    obs = Defin(Form.Controls(a)(i))
    si quelqu'un à une idee...

    merci[/quote]
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  11. #11
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    lorsque de ta boucle avec form.Controls(a) = ... tu pointe sur le premier contrôle trouvé de ton groupe et pas sur le groupe de contrôle c'est pour cela que tu as une erreur avec controls(a)(i)...

    tu peu parcourir ton groupe de controle par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim a as control
    For each a in Form.controls("NomGroupe")
      Debug.print a.index
    next
    ton code devrai donner quelque chose dans le genre .. ( n'aynt pas tous les autres fonction j'ai pas testé ..)

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Public Function Debog(balo As Control, Obstacl As String, Form As Form) 
    Dim bal As DefZone 
    Dim obs As DefZone 
    Dim foc As Coord 
    Dim i As Integer 
    Dim a As Control
    foc.Y = Form.Height / 2 
    foc.X = Form.Width / 2 
    bal = Defin(balo) 
    For each a in  Form.Controls(  Obstacl )
                        obs = Defin(a) 
                         'if replace(eceheaereleieee,"e","").found= true then msgbox replace (replace("jtaeso lso'atai tsorotausovéta", "ta",""),"so","") 
                        If bal.Center.X < obs.Right And bal.Center.X > obs.Left And bal.Center.Y > obs.Top And bal.Center.Y < obs.Down Then 
     
                            If Not Round(balo.Center) = Round(foc) Then 
                                balo.Top = balo.Top + (Form.Height / 2 - bal.Center.Y) / 4 
                                balo.Left = balo.Left + (Form.Width / 2 - bal.Center.X) / 4 
                            Else 
                                balo.Top = balo.Top + 250 
                                balo.Left = balo.Left + 250 
                            End If 
                        Else 
                            GoTo Norm 
                        End If 
    Next 
    Norm: 
    End Function

  12. #12
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    Merci bbil, mon problème est Vraiment résolu.

    le code que t avais trouvé étais preque bon juste quelques modifs et ça donne:
    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
    19
    20
    21
    22
    23
    24
    25
    26
    Public Function Debog(balo As Control, Obstacl As String, Form As Form)
    Dim bal As DefZone
    Dim obs As DefZone
    Dim foc As Coord
    Dim a As Control
    foc.Y = Form.Height / 2
    foc.X = Form.Width / 2
    bal = Defin(balo)
    Do
        For Each a In Form.Controls(Obstacl)
            obs = Defin(a)
            'if replace(eceheaereleieee,"e","").found= true then msgbox replace (replace("jtaeso lso'atai tsorotausovéta", "ta",""),"so","")
            If bal.Center.X < obs.Right And bal.Center.X > obs.Left And bal.Center.Y > obs.Top And bal.Center.Y < obs.Down Then
                If Not Round(bal.Center.X) = Round(foc.X) And Round(bal.Center.Y) = Round(foc.Y) Then
                    balo.Top = balo.Top + (Form.Height / 2 - bal.Center.Y) / 4
                    balo.Left = balo.Left + (Form.Width / 2 - bal.Center.X) / 4
                Else
                    balo.Top = balo.Top + 250
                    balo.Left = balo.Left + 250
                End If
            Else
                Exit Sub
            End If
        Next
    Loop
    End Function
    par contre, je suis déçu, personne n'a trouvé charlie (il est Vraiment quelque part dans le code.)

    salut
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  13. #13
    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


    replace(eceheaereleieee,"e","")
    Exécution :
    charlie jt'ai trouvé
    Mais j'arrive après la bataille désolé
    +++
    Ju
    "Il y a 3 personnes en ce monde sur qui tu peux compter : moi, le pape et le cavalier solitaire ! "
    Penser à svp

  14. #14
    Membre éprouvé
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Points : 1 220
    Points
    1 220
    Par défaut
    Bravo sosie

    juste une petite corection: si tu fait bien les replace tu obtient:salut
    Méphistophélès
    Si la solution ne résout pas votre problème, changez le problème...
    Cours et tutoriels C++ - FAQ C++ - Forum C++.

  15. #15
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Désolé de ressortir ce vieux sujet mais j'en avais besoin, et j'ai finalement trouvé une autre solution. J'ai un peu compliqué le code pour montrer ce que l'on pouvait faire :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Public Sub Informations(T As Object)
    Dim I As String
    Dim TypeObj As String
    Dim IsGroupe As Boolean
    Dim Txt As Boolean
    Dim Obj As Object
     
    Dim Msg As String
     
        On Error GoTo NotIndex
        IsGroupe = False
        I = Str(T.Count)
        On Error GoTo 0
        IsGroupe = True
        TypeObj = TypeName(T(T.Lbound))
        GoTo Affiche
    NotIndex:
        TypeObj = TypeName(T)
     
    Affiche:
    On Error GoTo Suite
    Txt = True
    If IsGroupe Then
        Set Obj = T(T.Lbound)
    Else
        Set Obj = T
    End If
     
    I = Obj.Caption
    Txt = False
    Suite:
        If IsGroupe Then
            Msg = "Groupe de control "
        Else
            Msg = "Control "
        End If
        Msg = Msg & TypeObj
     
        Msg = Msg & " avec propriété "
        If Txt Then
            Msg = Msg & "Text"
        Else
            Msg = Msg & "Caption"
        End If
     
        MsgBox Msg
     
    End Sub
    Exemple d'appel :
    Que Text1 soit un groupe de control ou non, un type TextBox ou non, vous aurez toutes les info necessaires pour afficher quelque chose dessus

    Le principe est simple :
    Si T.Count renvoie une erreur c'est qu'il ne sagit pas d'un groupe de control.
    TypeName renvoie le type du control (Utiliser T(T.LBound) si groupe et T sinon)
    Si T.Caption (ou T(T.Lbound).Caption si groupe) génère une erreur, alors c'est que le control utilise la propriété Text.

    En espérant que cela puisse servir à quelqu'un
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  16. #16
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    note : je n'ai pas tout lu la discussion jusqu'au bout, donc si je me plante avec ma suggestion...

    T'as pensé d'utiliser la propriété Tag pour définir un nom ou un numéro de groupe ?

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

Discussions similaires

  1. [VB.net] controler Excel dans une Form ?
    Par sergio_bzh dans le forum Windows Forms
    Réponses: 8
    Dernier message: 14/06/2006, 14h08
  2. Controle existence dans une table
    Par Daniel MOREAU dans le forum Access
    Réponses: 2
    Dernier message: 15/05/2006, 13h59
  3. [Type de données]Comment sauvegarder fichiers dans une bdd?
    Par splinternabs dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 06/04/2006, 15h14
  4. [VB.NET] extraire tt les controls prensents dans une form.
    Par Splash dans le forum Windows Forms
    Réponses: 7
    Dernier message: 21/12/2005, 19h12
  5. [VB6] [Interface] Nbre de contrôles maxi dans une feuille
    Par Midou dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/10/2002, 16h09

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