Multiselect avec retourner sur Tedit [Résolu]

Signaler
Messages postés
73
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
12 mai 2013
-
Messages postés
73
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
12 mai 2013
-
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

Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
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%" />
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
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%" />
Messages postés
73
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
12 mai 2013
1
je tien a te remercier pour ton aide [auteur/F0XI/360948.aspx f0xi  ]
et je te souhaite bonne continuation
Messages postés
73
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
12 mai 2013
1
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.
Messages postés
4202
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
37
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%" />
Messages postés
73
Date d'inscription
mardi 3 avril 2007
Statut
Membre
Dernière intervention
12 mai 2013
1
Salut f0xi,

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