shell13010
Messages postés73Date d'inscriptionmardi 3 avril 2007StatutMembreDernière intervention12 mai 2013
-
16 avril 2009 à 20:03
shell13010
Messages postés73Date d'inscriptionmardi 3 avril 2007StatutMembreDernière intervention12 mai 2013
-
19 avril 2009 à 13:02
Bonsoir a tous,
Alors je bloque sur un truc bete que j'arrive pas a resoudre donc comment selectionner plusieur items dans une listbox en la retournent dans un Tedit? apres chaque virgule..
exemple
items 1te
3st
5e
Dans le Tedit j'aimerais l'afficher comme sa te,st,e
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202234 16 avril 2009 à 21:37
dans les propriétés de la TListBox, MultiSelect doit etre a true
puis dans l'evenement OnClick de la TListBox ou grace a un boutton :
procedure TForm2.Button1Click(Sender: TObject);
var N, SC : integer;
S : string;
begin
if ListBox1.SelCount = 0 then
Exit;
SC := 1;
S := '';
for N := 0 to ListBox1.Count-1 do
if ListBox1.Selected[N] then
begin
if SC < ListBox1.SelCount then
S := S + ListBox1.Items[N] + ', '
else
S := S + ListBox1.Items[N];
inc(SC);
end;
Edit1.Text := S;
end;
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202234 17 avril 2009 à 11:21
alors petite precision :
si je te fait utiliser une variable S de type String plutot que la propriété Text du TEdit dans la boucle, c'est pour eviter d'appeler le OnChange du TEdit a chaque iteration de boucle.
comme cela on garde des performances "identique" selon si on selectionne 1, 5, 10, 100 elements.
si tu as d'autres questions, hesite pas, mais cherche un peu avant quand même.
shell13010
Messages postés73Date d'inscriptionmardi 3 avril 2007StatutMembreDernière intervention12 mai 20131 17 avril 2009 à 23:39
Salut [../auteur/F0XI/360948.aspx f0xi]
Alors j'aimerais avoir ton point de vue sur se que j'ai essayer de faire pour comprendre le code et surtout pour apprendre voila mon code
procedure TForm8.Button1Click(Sender: TObject);
Var I:Integer;
S:String;
begin
For I:= 0to ListBox1.Items.Count - 1 do
If ListBox1.Selected[I] then
begin
S:= ListBox1.Items[I]+','+S;
Edit1.text:=S;
end;
end;
peut tu me dire les Differences et si j'ai fait des erreurs?
me conseiller malgrer que j'utilise ta procedure j'aime bien comprendre se que je fait car copier et coller comme une mule s'en rien comprendre on progressera pas
bref en ésperant d'avoir une reponse meme si c'est résolu.
Bonne fin de soirée.
Vous n’avez pas trouvé la réponse que vous recherchez ?
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202234 18 avril 2009 à 15:36
procedure TForm8.Button1Click(Sender: TObject);
Var I: Integer;
S: String;
begin
{ }
// ne pas oublier ceci :
if ListBox1.SelectCount = 0 then // si rien n'est selectionné on sort
begin { }
Edit1.Text : = ''; // facultatif, remet a zero le texte du edit
Exit; // sortie de la methode
end; { } // cela empeche de lancer un traitement qui aura un resultat nul
// on connait deja le resultat ... pas besoin de continuer
S := '';
// S peut etre initialisé cela augmente un peu les performances
// ListBox1.Count = ListBox.Items.Count
// autant faire court et utiliser ListBox1.Count
for I := 0 to ListBox1.Count - 1 do
</strike>
// ATTENTION a l'indentation du code!
// ici tu transmet S a chaque itération, ce n'est pas le but!
begin { <for> }
if ListBox1.Selected[I] then // Si l'item I est selectionné
S : = ListBox1.Items[I] + ',' + S; // attention ici les elements seront inversé
// ou pour les avoir dans l'ordre :
// S := S + ',' + ListBox1.Items[I];
end; { <for> }
Edit1.text : = S;
// On transmet S a la fin, aprés la boucle!