![]()
est ce que je peux atteindre directement un Control seulement en connaissant son Tag at sans faire des boucles ?
d'avance...
![]()
est ce que je peux atteindre directement un Control seulement en connaissant son Tag at sans faire des boucles ?
d'avance...
On va dire que c'est possible ... mais ca nécessite beaucoup d'effort ...
Je m'explique :
1) Vérifier qu'au sein d'une même Form on a un tag différent pour chacun des composants...
2) Connaitre la classe du composant pour faire le transtypage
3) Effectué ce transtypage
Voici ce que ça donne vite fait :
J'ai mis 2 bouton sur une form, l'un ayant le tag 0 et l'autre le tag 1...
Code : Sélectionner tout - Visualiser dans une fenêtre à part ShowMessage(Tbutton(Form1.Components[1]).Caption);//1 est le tag de mon button2
Il ne vaut pas oublier que les propriétés des objets changent ... selon leur classe...
Ainsi, on accède au texte du bouton via la propriété Caption ce qui n'est pas le cas d'un Edit (propriété Text).
Voilà, après tout dépend de ce que tu veux faire ...![]()
Salut.
Merci bien Mr ero-sennin pour ta réponse et tes conseils.
mais je ne crois pas que c'est la bonne solution parceque là c'est l'indice du bouton et non pas son tag.
et si tu essai ceci :
tu auras bien droit a une erreur du genre "Indice de liste hors limites (20)".
Code : Sélectionner tout - Visualiser dans une fenêtre à part ShowMessage(Tbutton(Form1.Components[20]).Caption);//20 est le tag de mon button2
Bonjour,
Je verrais 2 solutions.
1°
Fair une liste( dans Un TObjectList) de tous les composants que je désire joindre via leur tag, et mettre l'indice correspondant dans le tag.
Dans ce cas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ObjectList := TObjectList.Create; ObjectList.Owner := false; ObjectList.Add(button1); Button1.Tag := ObjectList.count - 1; ObjectList.Add(button2); Button2.Tag := ObjectList.count - 1;
ObjectList[0] Renvoi un TObject qui est Button1 et Button1.tag = 0
ObjectList[1] Renvoi un TObject qui est Button2 et Button1.tag = 1
2° solution
Essayer de stocker le pointeur de l'objet dans le Tag. Cela devrait être possible, mais pou ce qui est des pointeurs, je ne maitrise que moyennement le sujet.
Ah oui, j'avais omis de dire que le tag devait comporter le nombre de components sur la Form ...
Ainsi le premier bouton placé aura le tag 0, le 2ième 1, le nième n-1 ...
C'est sur que cette solution n'est pas très pratique! De plus il faudrait à chaque fois renseigner le tag et pour peu que tu aies des créations dynamiques ... je te laisse imaginer ... (Vu l'heure du post hier, c'est tout ce que j'avais de mieux à te proposer)
Bonjour,
... dans l'absolu, en prenant chaque mot de la question à la lettre, c'est impossible car par défaut les tags sont tous à Zéro et ceux dont le tag a été mis manuellement à 2, 5, 8, 5 etc peuvent donc avoir le même tag à moins de faire visuellement soi-même un boucle.est ce que je peux atteindre directement un Control seulement en connaissant son Tag et sans faire des boucles ?
... Par contre si tu fais une boucle d'initialisation avec Form1.Components[i].tag:=i; où tu donnes au tag de chaque composant la valeur de son indice ça met de l'ordre dans la boutique ... et dans ce cas ShowMessage(Tbutton(Form1.Components[20]).Caption) où 20 est le tag de ton button2 tu n'auras pas l'erreur du genre "Indice de liste hors limites (20)" en supposant bien entendu que pour écrire cette ligne de code tu te souviennes que le 20 est bien le tag de ton button2 ... car autant écrire directement ShowMessage(Button2.Caption) ... Non ?
Faudrait nous en dire un peu plus sur le pourquoi tu veux pouvoir atteindre directement un Control seulement en connaissant son Tag et dans quel contexte.
A+![]()
Partager