Bonjour à tous,
Est-il possible de paramétrer un nom de variable en VB svp?
j'ai cherché sur Google et mes recherches n'ont rien donné...c'est pourtant une méthode qui permet de faire gagner beaucoup de temps....
merci d'avance pour vos réponses!
Version imprimable
Bonjour à tous,
Est-il possible de paramétrer un nom de variable en VB svp?
j'ai cherché sur Google et mes recherches n'ont rien donné...c'est pourtant une méthode qui permet de faire gagner beaucoup de temps....
merci d'avance pour vos réponses!
Qu'appelles tu "paramétrer un nom de variable" ?
eh bien j'ai :
donc je voudrais pourvoir faire:Code:
1
2
3
4
5
6
7
8 Dim sour As Integer sour=Form_souc.cout_sourcing_moyen.Text 'mais je veux que sour soit egal à Form_souc.cout_sourcing_pk.Text 'puis Form_souc.cout_sourcing_op.Text 'etc.
Si je réussis à faire ça, je pourrai ensuite créer un tableau de String avec les différents noms auxquels je veux faire appel, et faire une boucle sur ce tableau, ce qui me fera gagner énormément de temps!Code:
1
2
3
4 Dim param As String param="moyen" sour=Form_souc.cout_sourcing_¶m&.Text
Passe par un dictionnaire (ou une hashtable si tu utilises le framework 1.1). En clé tu mets le nom de ta "variable" et en valeur ce que tu veux lui associer (une chaîne, un contrôle, ...). Très simple de boucler dessus ensuite ou même d'accéder à un élément particulier connaissant le nom de la "variable".
Après, si tu n'as pas besoin d'accéder à un élément en particulier car tu dois toujours boucler sur l'ensemble une simple liste pourrait suffire je pense (la liste des contrôles dont on veut récupérer le texte par exemple). Il faudrait plus d'informations sur ton besoin et dans quels cas il s'applique pour mieux répondre après, car avec l'exemple de code donné on peut extrapoler mais on a vite fait de partir à côté.
merco StormimOn de ta réponse mais je ne sais pas ce qu'est une hashtable ou un dictionnaire...?
en fait j'ai 5 lignes avec 4 textbox, pour chacune de ces lignes je veux calculer la quatrième textebox avec la valeur des 3 premières. Je ne veux pas réécrire à chaque fois ce calcul , d'autant plus que j'ai besoin de refaire cette même action un peu plus bas dans mon form.
J'ai nommé mes textboxes avec en debut du nom la colonne et en fin de nom la ligne.
Donc je voulais faire:
mais avoir à faire chaque Select etc. c'est beaucoup trop long...donc je voudrais pourvoir mettre un nom de variable paramétrable pour pouvoir faire un boucle sur un tableau et ne pas m'embêter!Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 For i = 1 To 5 Select Case i Case 1 cout_so = Me.cout_s_moyen.Text cout_e = Me.e_moyen.Text ri_d = Me.rs_d_moyen.Text ri_v= Me.rs_v_moyen.Text ri_p = Me.rs_p_moyen.Text End Select cout_so = cout_e * (1 + (ri_d/ 100)) * (1 + (ri_v / 100)) * (1 + (ri_p / 100)) Select Case i Case 1 Me.cout_s_moyen.Text = cout_so End Select Next
je ne sais pas si j'ai été assez claire...
Une fois que l'on a le besoin exprimé ainsi c'est beaucoup plus clair ^^
On peut éventuellement faire une liste de listes de TextBox (pour représenter les TextBox de chaque ligne). Ensuite pour chaque ligne de TextBox on fait le traitement avec les premières et on met le résultat dans la dernière.
Désolé c'est du C# (framework 2.0), mais cela devrait rester compréhensible dans le principe :aie:
En espérant que cela t'aide ^^Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 List<List<TextBox>> textboxes = new List<List<TextBox>>(); // Ajout des TextBox // Ligne 1 textboxes.Add(new List<TextBox>()); textboxes[0].Add(textbox1); textboxes[0].Add(textbox2); textboxes[0].Add(textbox3); textboxes[0].Add(textbox4); // Ligne 2 textboxes.Add(new List<TextBox>()); textboxes[1].Add(textbox5); textboxes[1].Add(textbox6); textboxes[1].Add(textbox7); textboxes[1].Add(textbox8); // Ligne X ... string computedText; // On parcours chaque ligne foreach (List<TextBox> list in textboxes) { // Génération du texte en fonction des premières TextBox de la ligne en cours ... // Affectation du texte à la dernière TextBox de la ligne en cours list[list.Count - 1].Text = computedText; }
Merci de ta réponse mais....c'est moi qui déraille ou le composant List n'existe pas en VB? 8O
La classe List<T> est apparue avec les génériques et donc le framework 2.0 (ce que j'avais précisé). Donc si tu utilises le framework 1.1 tu n'auras pas cette classe, il faudra passer par ArrayList.
Si tu peux utiliser une version plus récente du framework, n'hésite pas ^^
ben merci StormimOn mais cette solution me fait aussi réécrire à chaque fois le nom de chacune de mes textboxes, elle vaut donc mon select case...mais je saurais maintenant ce que sont les ListArray!
Non en fait je cherchais à faire ceci:
mais je ne pense pas que ce soit faisable en VB...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Dim ligne() As String ligne=array("moyen","pk","op","hi","et") For i=0 To 5 cout_e = Me.e_&ligne(i)&.Text ri_d = Me.rs_d_&ligne(i)&.Text ri_v = Me.rs_v_&ligne(i)&.Text ri_p= Me.rs_p_&ligne(i)&.Text cout_so = cout_e * (1 + (ri_d/ 100)) * (1 + (ri_v / 100)) * (1 + (ri_p / 100)) Me.cout_s_&ligne(i)&.Text=cout_so Next
A partir du framework 2.0 ça aurait été éventuellement possible autrement, en passant par la propriété Controls du container de tes TextBox afin d'accéder à chaque contrôle par son nom. Avec le framework 1.1, on ne peut y accéder que par les index malheureusement.
ok...j'vais p'têt voir pour upgrader mon framework la prochaine fois...
merci en tout cas et bonne journée à toi ! :D
Est-ce que je dis une bétise en partant du principe que tu pourrais aussi parcourir ta collection de textbox avec un truc du genre
Si tu as créé ta première série de textbox dans un certain ordre, et que les suivantes sont des copiés/collés, ça doit pouvoir marcher.Code:
1
2
3
4
5
6
7 for i= 0 to 5 cout_e = Me.textbox(i*5).Text ri_d = Me.textbox(i*5+1).Text ri_v = Me.textbox(i*5+2).Text ri_p= Me.textbox(i*5+3).Text next i
Sinon, tu dois pouvoir déclarer un tableau à 2 dimensions avec l'indice de tes 4 textbox sur une dimension et tes 6 séries sur l'autre, puis tu passe ça en parmètre dans les textbox de ta boucle
Ca devrait marcher, désolé je suis un petit nouveau et ce n'est peut-être pas une manière tip top de programmer...Code:
1
2
3
4
5
6
7 for i= 0 to 5 cout_e = Me.textbox(Montableau(i,0)).Text ri_d = Me.textbox(Montableau(i,1)).Text ri_v = Me.textbox(Montableau(i,2)).Text ri_p= Me.textbox(Montableau(i,3)).Text next i