IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

Comment récupérer les élements sélectionnés d'une ListBox ?


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Par défaut Comment récupérer les élements sélectionnés d'une ListBox ?
    'lut

    J'ai beau chercher, je ne vois pas comment récuperer l'index de tous les élements sélectionnés d'une listBox avec multiSelect et Extendedselect activés. La propriété Count donne bien le nombre d'items sélectionnés, mais comment accéder à ceux qui n'ont pas le focus ?

  2. #2
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut,

    Il faut que tu examines la propriété Selected.

    Je te donne un cours exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    begin
      for i :=0 to(ListBox1.Items.Count -1)do begin
        if ListBox1.Selected[i]then 
          // Elément sélectionné
        else
          // Elément non sélectionné
    end;
    Voilou !
    @+

  3. #3
    Membre Expert
    Avatar de Frank
    Homme Profil pro
    Chef de projet Informatique
    Inscrit en
    Avril 2002
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Chef de projet Informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 095
    Par défaut
    Exemple de lecture d'une listbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure Tfrm_testD2006.Bt_fermetureClick(Sender: TObject);
      var i:integer;
    begin
      for I := 0 to lbtest.Count - 1 do begin
        showmessage(lbtest.Items.ValueFromIndex[i]);
      end;

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 54
    Par défaut
    merci bien, ça marche nickel.

  5. #5
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    On est obligés de parcourir toute la liste pour avoir les élements sélectionnés ?

    Je ne trouve pas ca très optimisé...

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    91
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2012
    Messages : 91
    Par défaut ListBox avec MultiSelect actif
    Ce post est un peu vieux mais j'aimerais attirer l'attention sur une faille de la solution proposée par Cl@udius :

    parcourir une longue liste de valeurs couplé à une évaluation à chaque itération est très malsain pour les ressources d'un ordinateur !!!

    donc vivement une propriété encapsulée dans le ListBox à cet effet.

  7. #7
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 939
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 939
    Par défaut
    Citation Envoyé par Fandyz Voir le message
    parcourir une longue liste de valeurs couplé à une évaluation à chaque itération est très malsain pour les ressources d'un ordinateur !!!
    Ce qui veut dire ?

  8. #8
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par défaut
    Il n'y a aucun problème avec la solution proposée car de toute façon c'est la seule solution possible, parcourir pour savoir qui est à True ou pas.

    Ce serait plus lourd de maintenir une liste des indexs sélectionnés/désélectionnés et dégraderait les performances globale de la liste...

    Tant qu'on ne touche pas à l'aspect de la liste, les boucles de ce genre sont très rapides à s’exécuter.
    Il faudra par contre faire appel à Items.BeginUpdate/EndUpdate si l'on inverse les état ou que l'on modifie les chaines de la liste.

    On peu par contre maintenir un compteur d'itération dans la boucle pour break dés qu'on dépasse le nombre de SelectCount !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for N := 0 to ListBox1.Count-1 do
    begin
      if ListBox1.Selected[N] then
        // 
      else
        //
      inc(I);
      if I >= ListBox1.SelectCount then
        break;
    end;
    Il ne faut pas oublier que l'on vas parcourir une List de booléens et non une liste de chaines !
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 21/05/2012, 15h46
  2. Réponses: 1
    Dernier message: 29/07/2010, 16h10
  3. [OpenOffice][Tableur] [Macro] Comment récupérer un nom sélectionné dans une listBox
    Par Big Brother dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 07/11/2008, 17h42
  4. Réponses: 1
    Dernier message: 07/06/2006, 18h56
  5. Réponses: 1
    Dernier message: 18/05/2006, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo