Manipuler les collections Controls et Forms

Signaler
Messages postés
3
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
2 août 2007
-
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
-
Boujour amis developpeurs !

J'ai un peu de mal a comprendre comment fonctionne les collections Forms et Controls. Malheureusement j'ai besoin de deux petites fonctions qui manipulent ces bestiaux et je m'en sort pas.

1iere fonction : Le but est de remplir une collection avec certains controls de mon formulaire et de passer cette collection en parametre d'une fonction qui va tester quelques propriétés des controls.
Je pensais faire un truc du style :

Dim Coll_Ctrl       As Collection

'ajout des controles a tester dans la collection. Ca marche pas et je sais pas quoi en faire
Coll_Ctrl(1) = MonForm.Controls("zone_de_text_A")
Coll_Ctrl(2) = MonForm.Controls("zone_de_text_B")
Coll_Ctrl(3) = MonForm.Controls("zone_de_liste_A")
Coll_Ctrl(4) = MonForm.Controls("zone_de_liste_D")
Coll_Ctrl(5) = MonForm.Controls("zone_de_liste_G")

    If  Fct_test_ctrl(Coll_Ctrl) = True Then
      
          MsgBox "Ce champ est vide !"

    End If

Public Function Fct_test_ctrl(P_Coll_Ctrl As Collection) As Boolean

Dim Ctrl    As Control

    For Each Ctrl In P_Coll_Ctrl
       
            If (IsNull(Ctrl.Value)) Or (Ctrl.Value = "") Then
           
                Fct_test_ctrl = True
                Ctrl.Setfocus
                Exit Function

        End If
   
    Next Ctrl
   
    Fct_test_ctrl = False

Ca marche pas terrible. En fait, il faut peu etre passer un tableau de controls (au lieu d'une collection) a ma fonction de test mais je sais pas faire non plus

2ieme fonction : Très simple, comment savoir si un formulaire est ouvert ou fermé ? En VBA il existe la propriété IsLoaded de la collection AllForms mais j'ai pas trouvé l'eqsuivalent VB.

J'ai essayé ca qui marche pas trop mal:

If FctFormOuvert(MonForm.Name) = True Then

    MsgBox MonForm.Name & " est chargé."

End If

Public Function FctFormOuvert(P_NomForm As String) As Boolean

Dim f As Form
For Each f In Forms
    If f.Name P_NomForm Then FctFormOuvert True
    Exit Function
   
Next

FctFormOuvert = False

End Function

Voila où j'en suis.
Donc si quelqu'un peu m'expliquer comment manipuler ces objets collections et faire en sorte que je trouve des solutions à mes 2 problèmes, je suis preneur.

Merci bcp bcp.

5 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
Salut,
Pour le premier (le tableau de control) si tu es bien en VB6  tu peux faire un tableau de TextBOx. (de control en général)

- Ajoute un Textbox nomme le toto
- Copier colle le textbox sur la feuille et répond oui à la question.
- Tu as à present un groupe de control appélé Toto

Tu peux alors passer ce ghroupe en parametre à une fonction
exemple

Private Sub Form_Load()

MsgBox ChampVide(Toto)
End Sub<hr />

Private Function ChampVide(Col As Object) As Boolean
Dim Txt As TextBox
   For Each Txt In Col
       If Txt.Text = vbNullString Then
           ChampVide = True
           Exit For
       End If
   Next
End Function , ----
[code.aspx?ID=41455 By Renfield]
Pour le deuixieme point je sais pas

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
3
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
2 août 2007

Pardon pardon ... oui oui je suis en VB6

Mmmmm c'est donc a ca que sert ce message obscur quand on fait un copier coller !!!
Merci de ta reponse [auteurdetail.aspx?ID=89254 jrivet] mais si je suis ta solution comment faire pour distinguer mes controls les uns des autres ?? Parce que là je vais avoir du toto(1) , toto(2), toto(3) ect sans trop savoir qui est qui.
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
Salut,
Sur Ta feuille tu peux les distinguer par leur propriété INDEX
Toto(1) aura l'index = 1

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
3
Date d'inscription
vendredi 12 janvier 2007
Statut
Membre
Dernière intervention
2 août 2007

Par les index je m'en sortirais pas. Il y a environ 25 champs sur ce formulaire et si je ne garde pas les noms je vais me perdre. lol
Merci beaucoup.
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
56
Salut,
Dans ce cas passer par COntrols puis utilise TypeOF pour voir le type du control dans la boucle.

@+: Ju£i?n
Pensez: Réponse acceptée