Multiselect avec retourner sur Tedit

Résolu
shell13010 Messages postés 73 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 12 mai 2013 - 16 avril 2009 à 20:03
shell13010 Messages postés 73 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 12 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

Auriez vous une idée?

Merci d'avance pour votre aide

Cordialement..

6 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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;

<hr size="2" width="100%" />
3
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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.

bonne journée et bonne continuation.

<hr size="2" width="100%" />
3
shell13010 Messages postés 73 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 12 mai 2013 1
16 avril 2009 à 22:32
je tien a te remercier pour ton aide [auteur/F0XI/360948.aspx f0xi  ]
et je te souhaite bonne continuation
0
shell13010 Messages postés 73 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 12 mai 2013 1
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
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>
If ListBox1.Selected[I] then

</strike>
     //
<strike>
begin

</strike>
     //  
<strike>
S:= ListBox1.Items[I]+','+S;

</strike>
     //  
<strike>
Edit1.text:=S;

</strike>
     //
<strike>
end;

</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!


end;


{ }








<hr size="2" width="100%" />
0
shell13010 Messages postés 73 Date d'inscription mardi 3 avril 2007 Statut Membre Dernière intervention 12 mai 2013 1
19 avril 2009 à 13:02
Salut f0xi,

Merci d'avoir prit le temp pour ton explication bien détailler j'ai compris mais erreur
0
Rejoignez-nous