Récupérer toutes les valeurs de différentes textbox avec une boucle? [Résolu]

Signaler
Messages postés
438
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
-
Messages postés
438
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
-
Bonjour,



J'ai une 20 aine de textbox, qui ont leur nom formatées pareil, sauf un chiffre à la fin.



Comment récupérer toutes ces textbox avec une boucle? On ma dit qu'il y
avait une astuce, mais la personne en question ne se rappelait plus.



Parce qu'en plus, sur chaque textbox, je dois effectuer un controle...



Merci!

9 réponses

Messages postés
1106
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
21
Je te code en live un truc, car çà devient sans fin cette histoire.

var i : integer;
Cp : TComponent;
Tbl : array[1..20] of string;
begin
for i:= 1 to 20 do
begin
Cp: =Form1.FindComponent('a'+IntToStr(i));
if Cp is TEdit then
Tbl[i]:= (Cp as TEdit).Text;
end;
end;

=============
Validez les réponses si ok...

ViewVite XP : HTML
Messages postés
438
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
3
juste:



if Form1.Components[x] is TShape then



pour les champs Edit, ya quelquechose devant, style Tedit???



Merci
Messages postés
1106
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
21
L'exemple que je t'ai donné fonctionne avec TShape. Par analogie, ça marche avec tous les composants du moment qu'ils sont considérés comme ce qu'ils sont.

var Edt : TEdit;
begin
Edt:= nil;
if Form1.Components[IndexSouhaité] is TEdit then
begin
Edt: =Form1.Components[IndexSouhaité] as TEdit;
//ensuite, Edt se comporte comme si tu avais Edit1, Edit2, ... ou Edit20
end;
end;

===========
Validez les réponses si ok...

ViewVite XP : HTML
Messages postés
438
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
3
ok, et comment l'on sait que mon "edit" qui se nomme a2 a l'index 2?
Messages postés
1106
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
21
var Edt : TEdit;
NomDuComposant : string;
begin
Edt:= nil ;
if Form1.Components[IndexSouhaité] is TEdit then
begin
Edt: =Form1.Components[IndexSouhaité] as TEdit;
NomDuComposant:= LowerCase(Edt.Name);
if NomDuComposant ='a2' then
{faire qqch} ;
end;
end;

Ou même encore :

var Edt : TEdit;
NumeroDuComposant : byte; //de 0 à 255
begin
Edt:= nil ;
if Form1.Components[IndexSouhaité] is TEdit then
begin
Edt: =Form1.Components[IndexSouhaité] as TEdit;
NumeroDuComposant:= StrToInt(Copy(Edt.Name,2,Length(Edt.Name))); //ne marche que pour un nom type "[UneLettre][UnNombre]"
case NumeroDuComposant of
0: {edit N°0} ;
1: {edit N°1} ;
[...]
end;
end;
end;

=============
Validez les réponses si ok...

ViewVite XP : HTML
Messages postés
438
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
3
ouais mais si je dois mettre un select case pour chaque solution,
ou un if pour chaque solution, j'y gagne plus grand chose...
non?
Messages postés
1106
Date d'inscription
samedi 8 novembre 2003
Statut
Membre
Dernière intervention
3 septembre 2006
21
Je crois que tu ne vois pas l'astuce...

Le CASE que je viens juste de te donner sert si tu veux faire un traitement particulier sur un édit particulier. Mais du moment que la ligne Edt:= Form1.... est SUCCESSFUL, que Edt pointe sur Edit1, Edit2 ou le reste, son comportement sera celui du composant désigné par Form1.Machin

Prenons la ligne...
Edt:=Form1.Components[IndexSouhaité] as TEdit;
...et supposons que Form1.Components[IndexSouhaité] =Edit4.

Alors, si tu fais par exemple: Edt.Color:=clBlack, c'est comme si tu faisais Edit4.Color:=clBlack.

Edt n'est qu'un composant virtuel qui se fait passer pour le composant qu'il désigne.

Ce que je comprend dans ta question, c'est que tu veux récupérer l'objet d'après son nom. Voilà, c'est fait ! Tu n'as plus qu'à considérer le composant dont tu connais le nom via la variable Edt.

===========
Validez les réponses si ok...

ViewVite XP : HTML
Messages postés
438
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
3
oui mais je dois mettre les différents a1, a2---> a20 dans un
tableau nommé a[] et ayant les meme identifiants, ca eut dire que je
dois faire 20 différents cas dans le select case
Messages postés
438
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
3
ah je connnaissais pas "findcomponent"!!! Merci bien pour ta réponse, tout s'éclaire!