chewbaka62
Messages postés67Date d'inscriptionmardi 1 novembre 2005StatutMembreDernière intervention30 juillet 2006
-
26 mai 2006 à 14:29
chewbaka62
Messages postés67Date d'inscriptionmardi 1 novembre 2005StatutMembreDernière intervention30 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.
cs_vpoyo
Messages postés363Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention20 avril 20106 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.
cs_vpoyo
Messages postés363Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention20 avril 20106 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
cs_vpoyo
Messages postés363Date d'inscriptionvendredi 14 février 2003StatutMembreDernière intervention20 avril 20106 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.
chewbaka62
Messages postés67Date d'inscriptionmardi 1 novembre 2005StatutMembreDernière intervention30 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.