Tableau de contrôles en VB .NET [Résolu]

Signaler
Messages postés
67
Date d'inscription
mardi 1 novembre 2005
Statut
Membre
Dernière intervention
30 juillet 2006
-
Messages postés
67
Date d'inscription
mardi 1 novembre 2005
Statut
Membre
Dernière intervention
30 juillet 2006
-
Je cherche à déclarer des tableaux de contrôles en VB .NET mais je n'y arrive pas, alors qu'avec VB 6.0, on pouvait le faire en utilisant des groupes de contrôles et les gérer via leur propriété Index. Quand je met " Dim etiquette(10) as new Label, il ne l'accepte pas. Existe -t'il un moyen ou une astuce?
Merci d'avance.

9 réponses

Messages postés
363
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
20 avril 2010
3
si tu utilises la propriété Controls du container parent (un panel par
exemple) ca revient à écrire ce qu'a fait visualresine sauf que tu
auras mon_pane.Controls.add(mon_new_label) et quand tu veux faire un
trairement sur les labels ben faut récupérer le bon label pour celà
faut aller le chercher et tu fais un

for each mon_control in mon_panel.Controls

    blablabla

next

attention contrairement au code de visualresine tu récupéreras des
objet de type control qu'il faudra caster en label si tu veux voir les
propriétés dans l'éditeur (autocompletion)


sinon comme je disais tu peux utiliser un hashtable ou un arraylist.
l'arraylist revient toujours au même code que visualresine la
différence vient du fait que tu n'as pas a spécifier un nombre
d'élément pour le tableau donc tu n'est pas limité par un max et tu
n'as pas a gérer des cases du tableau vide de plus tu n'as pas a gérer
l'accroissement (ou la diminution) de la taille de ton arraylist quand
tu lui ajoutes un élément par contre tes objets seronts casté en Object
donc il faudra les caster en Label pour les utiliser (ctype()) et
l'arraylist est un peu moins rapide qu'un tableau (mais bon tu verras
pas beaucoup la différence). la hashtable est comme l'arraylist sauf
que l'indice du tableau est l'objet que tu veux. tu peux donc mettre en
clé le nom du label. l'avantage ici est que lorsque tu sais quel
élément tu veux manipuler (tu connais son nom) tu n'as pas a boucler
sur un tableau, arraylist, ou propriété Controls, il suffit juste de
faire un ma_hashtable("label_numero_trois")

(dans ce cas ca veut dire que tu avais fait avant un mon_label.name = "label_numero_trois")


quelque soit la méthode que tu utilises les algos sont toujours pareil (a quelques tout petits détails prêt)

pour créer un label tu fais

       dim l_label as Label = new Label()

       'ensuite tu fixes les propriétés qui vont bien

     

        'on ajoute le label au container graphique

       mon_container.add(l_label) 'ce container peut être une form, un panel, ....

       'si tu utilises un array, arraylist ou hashtable

       'il faut ajouter ici le code pour le mettre dans ta structure


généralement ce code là ce trouve dans une boucle (for each, for i,
while) par rapport à un indice, ou un ensemble d'élément recordset par
exemple.


quand tu veux rechercher un label  plus loin dans le code tu dois
connaitre une des propriétés voulu, comme je te disais ca peut être son
nom (Name), sa valeur (Text), un objet associé (Tag) voir sa position à
l'écran (Top & Left).

les boucles c'est toujours pareil :

       for each element in structure

          if element.maPropriété = propriete_souhaitée then

             traitement()

             exit for

          end if

       next


attention toujours au cast des objets, et la hashtable te permet d'éviter ces boucles pour chercher un élment.


en espérant que celà t'aide


(tain j'ai jamais fait un poste aussi long :-)
Messages postés
363
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
20 avril 2010
3
Le mieux reste de les grouper dans un container.
ensuite pour les récupérer il faut boucler sur la propriété Controls du container et de réussir à identifier celui qui t'intéresse. ca peut être la valeur (propriété Text), une donnée (comme la propriété Tag) ou le nom. pour ce dernier ca veut dire que tu as pensé à tous les appelés, par exemple, monLabel_XX. en récupérant la partie après le caractère _ tu connais son numéro identifiant
Messages postés
561
Date d'inscription
samedi 10 janvier 2004
Statut
Membre
Dernière intervention
11 octobre 2010

Les groupes de controles n'existent plus en vb.net.... Fais ce que vpoyo dit c'est une des seule solution....
Messages postés
102
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
29 avril 2007

essaye ça : 

Dim etiket As New List(Of Label)    'Creation du "tableau de label"



Dim label1 As New Label           'Creation d'un nouveau Label
label1.Text = "Test1"             'son Text
label1.Name = "Label1"            'son Nom



etiket.Add(label1)  'Ajout du label créé précédement dans le "tableau de label"



Dim label2 As New Label            'Creation d'un nouveau Label
label2.Text = "Test2"              'son Text
label2.Name = "Label2"             'son Nom



etiket.Add(label2)  'Ajout du label créé précédement dans le "tableau de label"





'Listage des "Text" des labels présent dans le tableau
Dim i
For i = 0 To etiket.Count - 1
    MsgBox(etiket(i).Text)
Next


a+
VBSorcier
Messages postés
102
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
29 avril 2007

par contre c'est en .net2 (VB2005) !!!!
Messages postés
363
Date d'inscription
vendredi 14 février 2003
Statut
Membre
Dernière intervention
20 avril 2010
3
ben on peut toujours simuler ce comportement en .net1.1 avec un arrayList ou une HashTable. mais bon en fait on ne fait que dédoubler la collection Controls tu container parent.
Messages postés
67
Date d'inscription
mardi 1 novembre 2005
Statut
Membre
Dernière intervention
30 juillet 2006

Merci vpoyo pour ta réponse mais concrètement, je ne vois pas comment faire. Peux-tu donner un petit exemple?
Merci d'avance.
Messages postés
46
Date d'inscription
vendredi 23 septembre 2005
Statut
Membre
Dernière intervention
31 janvier 2008

voici une solution pour avoir un tableau de label (solution developpé par Charly)


 Private tab_lab_1(30) As Label


Me.tab_lab_1(i) = New Label

Me.TabPage1.Controls.Add(Me.tab_lab_1(i))


Me.tab_lab_1(i).Location = New Point(5, 90)

Me.tab_lab_1(i).Size = New Size(67, 15)

Me.tab_lab_1(i).Text = Me.tab_heure_1(i, 0)

Me.tab_lab_1(i).Show()
Messages postés
67
Date d'inscription
mardi 1 novembre 2005
Statut
Membre
Dernière intervention
30 juillet 2006

Merci Vpoyo, cette fois-ci c'est clair et merci pour ton (long mais précis ) post. Entretemps, j'avais trouvé une autre solution en utilisant la notion de collection des contrôles dans son container.
Ex: control.item(index).text et boucler sur l'index. Ca marche très bien
Merci encore une fois.