Tableau de contrôles en VB .NET

Résolu
chewbaka62 Messages postés 67 Date d'inscription mardi 1 novembre 2005 Statut Membre Dernière intervention 30 juillet 2006 - 26 mai 2006 à 14:29
chewbaka62 Messages postés 67 Date d'inscription mardi 1 novembre 2005 Statut Membre Dernière intervention 30 juillet 2006 - 29 mai 2006 à 08:47
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

cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
29 mai 2006 à 00:07
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 :-)
3
cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
26 mai 2006 à 14:41
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
0
cs_yvesyves Messages postés 561 Date d'inscription samedi 10 janvier 2004 Statut Membre Dernière intervention 11 octobre 2010
26 mai 2006 à 15:00
Les groupes de controles n'existent plus en vb.net.... Fais ce que vpoyo dit c'est une des seule solution....
0
VBSorcier Messages postés 102 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 29 avril 2007
26 mai 2006 à 15:13
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
0

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

Posez votre question
VBSorcier Messages postés 102 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 29 avril 2007
26 mai 2006 à 15:14
par contre c'est en .net2 (VB2005) !!!!
0
cs_vpoyo Messages postés 363 Date d'inscription vendredi 14 février 2003 Statut Membre Dernière intervention 20 avril 2010 6
26 mai 2006 à 15:22
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.
0
chewbaka62 Messages postés 67 Date d'inscription mardi 1 novembre 2005 Statut Membre Dernière intervention 30 juillet 2006
26 mai 2006 à 21:50
Merci vpoyo pour ta réponse mais concrètement, je ne vois pas comment faire. Peux-tu donner un petit exemple?
Merci d'avance.
0
visualresine Messages postés 46 Date d'inscription vendredi 23 septembre 2005 Statut Membre Dernière intervention 31 janvier 2008
28 mai 2006 à 19:46
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()
0
chewbaka62 Messages postés 67 Date d'inscription mardi 1 novembre 2005 Statut Membre Dernière intervention 30 juillet 2006
29 mai 2006 à 08:47
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.
0
Rejoignez-nous