Nargzul
Messages postés438Date d'inscriptionvendredi 9 mai 2003StatutMembreDernière intervention26 juillet 2007
-
29 août 2005 à 08:24
Nargzul
Messages postés438Date d'inscriptionvendredi 9 mai 2003StatutMembreDernière intervention26 juillet 2007
-
29 août 2005 à 14:59
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...
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 29 août 2005 à 14:32
Je te code en live un truc, car çà devient sans fin cette histoire.
var i : integer;
Cp : TComponent;
Tbl : array[1..20] ofstring;
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;
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 29 août 2005 à 10:15
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;
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 29 août 2005 à 11:38
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;
cs_grandvizir
Messages postés1106Date d'inscriptionsamedi 8 novembre 2003StatutMembreDernière intervention 3 septembre 200622 29 août 2005 à 12:36
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.
Nargzul
Messages postés438Date d'inscriptionvendredi 9 mai 2003StatutMembreDernière intervention26 juillet 20074 29 août 2005 à 14:21
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