Automatiser une collection de controls

theflolyon Messages postés 11 Date d'inscription mardi 8 juillet 2008 Statut Membre Dernière intervention 27 février 2010 - 27 févr. 2010 à 19:24
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 27 févr. 2010 à 22:37
Bonjour a tous,

pour créer une collection de TextBox je :

- défini la collection dans le Public Class
[i] Public Class Form_Elèves
'Création de la collection Détails
Dim Détails As New Collection/i

- puis je remplis ma collection dans Form Load
[i] Private Sub Chargement_de_la_Form(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

'Remplissage de la collection Détails
Détails.Add(Me.TextBox1)
Détails.Add(Me.TextBox2)
Détails.Add(Me.TextBox3)
.../i

Oui mais, ne peut on pas automatiser le processus ? au cas ou il y ai 30 controls textbox. Par ce que la c'est long et surtout cette partie du code n'est pas réutilisable d'une form a l'autre (au cas ou le nombre de textbox soit different)

Evidement, vous aurez compris que je doit pouvoir lire/modifier/supprimer un control en particulier comme avec un index. (d'ou l'utilisation d'une collection et nom d'un for each as control)



... Toujours apprendre, jamais dépendre ...

5 réponses

NHenry Messages postés 15025 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
27 févr. 2010 à 19:29
Bonjour,

Si avec une liste :
Private mListeTextBox as new list(of TextBox)

ensuite à toi d'adapter.

Mon site
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
27 févr. 2010 à 20:47
Oui mais, ne peut on pas automatiser le processus


Non, car il faudra bien à un moment ou à un autre remplir ta collection en ajoutant un à un les controles.

Et d'ailleurs, si tu ouvre le fichier designer correspondant à ta form (fichier caché par défaut), tu constatera que c'est exactement qu'il y est fait à l'intérieur.
Chaque contrôle est créé et ajouté un à un à la collection Controls du container parent

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
theflolyon Messages postés 11 Date d'inscription mardi 8 juillet 2008 Statut Membre Dernière intervention 27 février 2010
27 févr. 2010 à 21:17
Merci de vos réponses

NHenry, après recherche dans l'aide ou sur internet, je ne vois pas comment utiliser les list. De plus je ne comprend pas le Private devant ton code. Peux tu m'en dire plus stp ?

Casy, ce que je cherche a faire est possible en vba sous Excel et, apparemment, l'était dans les anciennes versions de VB.
je m'étonne qu'une fonction aussi pratique que l'indexation d'un type de control n'ai pas d'équivalent dans VB2008.

je continue mes essais et recherches...


... Toujours apprendre, jamais dépendre ...
0
NHenry Messages postés 15025 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
27 févr. 2010 à 21:56
Bonjour,

Pour déclarer la collection :
Private mLstTextBox as new list(of TextBox)
(Private est la visibilité de l'attribut mLstTextBox)

Pour créer les TextBox :
(dans une sub/function)
dim lTextBox as TextBox
For i as integer=1 to NbTextBoxACreer
    lTextBox=new textbox
    mLstTextBox.Add(lTextBox)
    me.Controls.Add(lTextBox)
    lTextBox.Visible=True
Next i


Ensuite, dans mLstTextBox, tu as les textbox crées.

Pour plus d'information concernant les mots clés, l'aide est faite pour ça.
Pour la création et l'ajout d'un controle, regarde dans le fichier .Design.vb créé pour ta form.

Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
27 févr. 2010 à 22:37
je cherche a faire est possible en vba sous Excel et, apparemment, l'était dans les anciennes versions de VB.
je m'étonne qu'une fonction aussi pratique que l'indexation d'un type de control n'ai pas d'équivalent dans VB2008.

Si, il y a un équivalent, c'est d'utiliser une collection (VB6 et VBA ne font rien d'autre).

Sauf que ce qui était fait automatiquement et de manière transparente en VB6 et VBA, il faut désormais le faire à la main.
C'était pratique en VB6, mais quand même limité. C'est plus contraignant en .Net mais ouvre quand même plus de possibilités.
Pourquoi cela n'a pas été implanté, personnellement je n'en sais rien, je laisse les plus grands spécialistes répondre à cette question.

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0