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

EDI Delphi Discussion :

[Kylix] Trouver ts les éléments d'une sel. multiple ds une T


Sujet :

EDI Delphi

  1. #1
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 62
    Points
    62
    Par défaut Trouver ts les éléments d'une sel. multiple ds une TListView
    Salut à tous,

    Je veux faire le truc suivant : à gauche une TListView contenant des trucs (mais tous) et à droite une TListBox qui ne contient que certains trucs (sélectionnés de la TListView, puis ajoutés par un clic sur un bouton [Ajouter>>]).

    Mais voilà, je n'arrive pas à trouver tous les éléments sélectionnés de la TListView... J'ai bien maté dans l'aide, mais la méthode qui y est proposée ne fonctionne pas.

    Pour info, voilà ce que j'ai fait (et qui ne fonctionne pas, d'où le post )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    void __fastcall TMyForm::BtAjouterClick(TObject* Sender)
    {
        if(ListView->Selected != NULL)  //Il y a au moins un élément sélectionné
        {
            TListItem* next = ListView->Selected;
            ListBox->Items->Add(AnsiString(next->Caption) );  //J'ajoute déjà l'en-tête du premier élément sélectionné...
     
            //Là je vais chercher les autres éléments sélectionnés (et ça foire :-(
            do
            {
                next = ListView->GetNextItem(next, sdBelow, TItemStates()<<isSelected);
                if(next != NULL)  //Si on a trouvé un truc, on l'insère...
                    ListBox->Items->Add( AnsiString(next->Caption) );
            }
            while(next != NULL);
        }
    }
    Ce code compile correctement et s'exécute sans erreur, à ceci près qu'il ne trouve aucun élément sélectionné, même si, en fait, ils le sont tous.

    Bon voilà, il fait chaud, c'est le WE dans pas longtemps, je me suis creusé la tête là-dessus pendant une bonne heure et demi, et là, j'ai qu'une envie c'est de rentrer chez moi prendre une douche. Alors si une bonne âme connait la réponse à ce mystère, qu'il/elle m'aide, je lui en serai éternellement reconnaissant...

  2. #2
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 62
    Points
    62
    Par défaut
    Salut à tous,

    Un week end à la plage aidant, j'ai trouvé... Alors pour info, si d'autres ont rencontré ce problème, je vous donne ma soluce:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    void __fastcall TMyForm::BtAjouterClick(TObject* Sender) 
    { 
        if(ListView->SelCount==1)  //Il y a un seul élément sélectionné 
        { 
            ListBox->Items->Add(AnsiString(ListView->Selected->Caption) );  //J'ajoute l'en-tête de cet élément sélectionné... 
            ListView->Selected = NULL; //Déselectionne l'élément ajouté
        }
        else if(ListView->SelCount > 1)  //Ici, plusieurs éléments sont sélectionnés
        {
            for(unsigned i=0; i<ListView->Items->Count; i++)
            {
                TListItem* curr = ListView->Items->operator [](i); //A ce propos, ListView->Items[i] ne fonctionne pas... Si qq'un sait pourquoi...
                if(curr->Selected)
                {
                    ListParams->Items->Add(AnsiString(curr->Caption) );
                    curr->Selected = false; //Déselectionne l'élément ajouté
                }
            }
        } 
    }
    Voilà, sinon, je galère toujours avec la sélection multiple dans une ListBox... Pffff.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2003
    Messages
    65
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 65
    Points : 62
    Points
    62
    Par défaut
    Et voilà, avec un peu de persévérance, j'ai trouvé finalement comment accèder à tous les éléments d'une ListBox... Enfin, cette solution n'est pas générale car il faut supprimer les éléments sélectionnés pour qu'elle fonctionne. Mais la voilà quand même...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void __fastcall TMyForm::BtRemoveClick(TObject *Sender)
    {
        for(unsigned i=0; i<ListBox->SelCount; i++)
        {
            for(unsigned j=ListBox->Items->Count; j>0; j--)
                if(ListBox->Selected[j-1])
                    ListBox->Items->Delete(j-1);
        }
    }
    Voilà. Bon courage à tous!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/09/2012, 14h10
  2. Récupérer les éléments de deux map différentes en une seule boucle.
    Par floctc dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 19/05/2010, 15h50
  3. [Débutant] Trouver tous les éléments max d'un vecteur
    Par karim_chriqi dans le forum MATLAB
    Réponses: 2
    Dernier message: 06/02/2009, 17h53
  4. Réponses: 1
    Dernier message: 01/08/2008, 20h12
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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