Mettre les noms de controle dans un tableau puis les utiliser ?

Résolu
masena Messages postés 18 Date d'inscription mercredi 1 avril 2009 Statut Membre Dernière intervention 23 décembre 2010 - 25 févr. 2010 à 09:58
masena Messages postés 18 Date d'inscription mercredi 1 avril 2009 Statut Membre Dernière intervention 23 décembre 2010 - 25 févr. 2010 à 10:39
Bonjour à tous,

J'ecris un programme et je me heurte à un problème. L'execution du programme est assez répétitive et je souhaiterais faire mon code une fois et le réutiliser sans le modifier.

J'ai ainsi de nombreux controles sur mon formulaire, je voudrais rentrez les noms de ces controles dans un tableau.

ex : T1(1,1) = Textbox1
T1(1,2) = Textbox2
T1(1,3) = Textbox3
.....

Est il possible par la suite de faire un truc du genre
For i = 1 to ...
T1(1,i).Text = "quelquechose"
Next

Merci de vos reponses,

3 réponses

dp_favresa Messages postés 132 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 11 mai 2010
25 févr. 2010 à 10:25
Bonjour,

Tu peux t'inspirer de ce que je fais :
Public TBox(60) As System.Windows.Forms.TextBox
Public VarTrav As String                '   Variable de travail

        '   Chargement des noms des TextBox en table pour pouvoir les charger par Tbox(index)
        For Each Ctrl As Control In Me.Controls
            If Ctrl.Name.Substring(0, 2) = "TB" Then      ' Chaque TextBox est nommé TB...
                VarTrav = Ctrl.Name
                TBox(CInt(Mid(Ctrl.Name, 3, 2))) = CType(Ctrl, System.Windows.Forms.TextBox)
            End If
        Next

        '   Chargement des TextBox
        j = 0
        For i = 0 To 19
            If Not DateAff(i) = "" Then
                j = j + 1
                TBox(j).Text = DateAff(i)
                j = j + 1
                TBox(j).Text = Poidsfix(i)
                j = j + 1
                TBox(j).Text = PoidsSD(i)
            End If
        Next


Cordiales salutations et bonne prog
dp
3
PCPT Messages postés 13278 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 48
25 févr. 2010 à 10:30
salut,

pas aussi simplement non, pas en VB6 du moins

ça ne sera pas
T1(1,2) = Textbox2

mais
T1(1,2) = "Textbox2" 

mais dans ton cas, si chaque control a bien un nom unique (pas de groupe de controls), il vaut mieux utiliser une collection pour jouer sur le KEY

dim cControls as new collection
'texte, nom du ctrl
cControls.add "zone1", "Textbox1"
cControls.add "zone2", "Textbox2"
cControls.add "un bouton", "CommandButton1"


ensuite il faudra faire une boucle et tester CHAQUE TYPE

ce qui ressemblera à ceci :

dim ctrl as object
for each ctrl in me
if typeof ctrl is commandbutton then
ctrl.caption = cControls.item(ctrl.name)
elseif typeof ctrl is textbox then
ctrl.Text = cControls.item(ctrl.name)
else 'etc.... selon les types
endif
next ctrl
set ctrl = nothing


mais bien sûr comme dans ton énoncé tu as indiqué Textbox2 (au lieu de Text2, en VB6), tu es surement en VBA !!!


te reste donc à adapter le code que je viens d'indiquer, la syntaxe des types n'est pas la même !!!
(ah c'est peut-être pour çà qu'il y a des rubriques différentes dans les forums )

me semble d'ailleurs qu'en VBA on peut accéder à un élément depuis son nom.... simplifiant encore la tâche

++
[hr]
0
masena Messages postés 18 Date d'inscription mercredi 1 avril 2009 Statut Membre Dernière intervention 23 décembre 2010
25 févr. 2010 à 10:39
Merci pour vos réponse ca me sauve la mise je vais pouvoir avancer, la solution de dp_favresa marche nickel.

Merci beaucoup
0
Rejoignez-nous