Automatiser une collection de controls

Signaler
Messages postés
11
Date d'inscription
mardi 8 juillet 2008
Statut
Membre
Dernière intervention
27 février 2010
-
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
-
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

Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
Bonjour,

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

ensuite à toi d'adapter.

Mon site
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
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
Messages postés
11
Date d'inscription
mardi 8 juillet 2008
Statut
Membre
Dernière intervention
27 février 2010

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 ...
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
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
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
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