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

C++Builder Discussion :

ListBox et Multiselect [Interface]


Sujet :

C++Builder

  1. #1
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut ListBox et Multiselect
    Bonjour à tous

    J'ai posé sur une boite de dialogue une ListBox avec la propriété multiselect à true car j'ai besoin de pouvoir dans cette listBox sélectionner plusieurs Éléments.

    Mon problème est que je n'arrive pas à récupérer les Éléments sélectionnés.

    Je remplit la liste par programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // on va ajouter les Blocs dans la ListBoxBloc
    for(int i = 1; i <= NombreDeBloc; i++)
    {
    	// on ajoute également l'objet correspondant dans la ListeBoxTaillesLignes
    	ListBoxBlocs->Items->Add("Bloc N°" + String(i));
    }
    Et voici la partie de code que je fait pour la récupération des Éléments sélectionnés

    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
    21
    22
    23
    24
     
    // On crée le texte pour l'Item de l'analyse
    String TexteAnalyse = "Bloc(s) ";
     
    // On balaye la ListeBoxBlocs
    for(int i = 0; i < ListBoxBlocs->Count; i++)
    {
    	// Si l'élément est sélectionné
    	if(ListBoxBlocs->Selected[i].IsSelected)
    	{
    		// Si l'on n'est pas au premier passage
    		if(i > 0)
    		{
    			// on ajoute un espace au texte
    			TexteAnalyse += ", ";
    		}
     
    		// On ajoute le texte
    		TexteAnalyse += String(i + 1);
    	}
    }
     
    // on affiche le texte
    ShowMessage(TexteAnalyse);
    Dans tous les cas, mon texte affiché est "Blocs(s) 1, 3

    Cela me sélectionne tout le temps l'élément 0 et l'élément 2 quoi que je sélectionne dans ma liste. Avez-vous une idée du problème.

    Je suis sous RAD Studio Berlin

    Merci d'avance pour votre aide

  2. #2
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Hello
    inspire toi de l'exemple suivant tiré de l'aide d'embarcadero
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     
    #include <stdio.h>     // for FILE, fopen, fstat, fileno, fread and fclose
    #include <sys\stat.h>  // for fstat and the stat struct
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      for (int i = 0; i < FileListBox1->Items->Count; i++)
      {
        if (FileListBox1->Selected[i])
        {
          if (!FileExists(FileListBox1->Items->Strings[i]))
          {
            MessageBeep(0);
            if (Application->MessageBox(
              String("File " + FileListBox1->Items->Strings[i] + "not found").c_str(),
              NULL,
              MB_OKCANCEL) == IDCANCEL)
              break;
            else
              continue;
          }
          FILE *F = fopen(AnsiString(FileListBox1->Items->Strings[i]).c_str(),"r");
          struct stat statbuf;
          fstat(fileno(F), &statbuf);
          ListBox1->Items->Add(
              FileListBox1->Items->Strings[i] + ": " + IntToStr(int(statbuf.st_size)));
          fclose(F);
        }
      }
    }
    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Merci pour ta réponse DjmSoftware

    Malheureusement cela me met une Opération de Structure Incorrecte sur la ligne de test du Selected

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Si l'élément est sélectionné
    if(ListBoxBlocs->Selected[i])
    {
    ...
    J'avais déjà essayé en m'inspirant de cet exemple justement.

    J'ai oublié de préciser dans mon post précédent, je ne sais pas si cela à une incidence ou non mais j'utilise FMX

  4. #4
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Hello
    comportement étonnant
    l'exemple suivant fonctionne parfaitement chez moi testé sur C++Builder 6,2010,10.1,10.3
    le dfm
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    object Form10: TForm10
      Left = 0
      Top = 0
      Caption = 'Form10'
      ClientHeight = 299
      ClientWidth = 635
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object ListBox1: TListBox
        Left = 384
        Top = 8
        Width = 201
        Height = 225
        ItemHeight = 13
        Items.Strings = (
          '1'
          '3'
          '5'
          '7'
          '9'
          '2'
          '4'
          '6'
          '8')
        MultiSelect = True
        TabOrder = 0
      end
      object Memo1: TMemo
        Left = 8
        Top = 8
        Width = 241
        Height = 225
        Lines.Strings = (
          'Memo1')
        TabOrder = 1
      end
      object Button1: TButton
        Left = 256
        Top = 256
        Width = 75
        Height = 25
        Caption = 'Button1'
        TabOrder = 2
        OnClick = Button1Click
      end
    end
    le.h
    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
    21
    22
    23
    24
    25
    26
     
    //---------------------------------------------------------------------------
     
    #ifndef Unit10H
    #define Unit10H
    //---------------------------------------------------------------------------
    #include <System.Classes.hpp>
    #include <Vcl.Controls.hpp>
    #include <Vcl.StdCtrls.hpp>
    #include <Vcl.Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm10 : public TForm
    {
    __published:	// Composants gérés par l'EDI
    	TListBox *ListBox1;
    	TMemo *Memo1;
    	TButton *Button1;
    	void __fastcall Button1Click(TObject *Sender);
    private:	// Déclarations utilisateur
    public:		// Déclarations utilisateur
    	__fastcall TForm10(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm10 *Form10;
    //---------------------------------------------------------------------------
    #endif
    et finalement le code simplifié
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    //---------------------------------------------------------------------------
     
    #include <vcl.h>
    #pragma hdrstop
     
    #include "Unit10.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm10 *Form10;
    //---------------------------------------------------------------------------
    __fastcall TForm10::TForm10(TComponent* Owner)
    	: TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm10::Button1Click(TObject *Sender)
    {
       	for(int i(0);i<ListBox1->Items->Count;i++)
    	{
    	  if (ListBox1->Selected[i])
    	   {
    		   Memo1->Lines->Add(L"Elément Sélectionné = "+ListBox1->Items->Strings[i]);
    	   }
    	}
    }
    //---------------------------------------------------------------------------
    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  5. #5
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    Tu utilises la VCL toi, c'est peut être pour cela que cela ne fonctionne pas pour moi avec FMX

  6. #6
    Membre éclairé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    934
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 934
    Par défaut
    C'est bon, j'ai poussé un peu plus loin mes recherches sur le net et j'ai trouvé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Si l'élément est sélectionné
    if(ListBoxBlocs->ListItems[i]->IsSelected)
    {
       ...

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

Discussions similaires

  1. Listbox multiselect ?
    Par maxmarie dans le forum ASP.NET
    Réponses: 4
    Dernier message: 10/02/2009, 14h02
  2. Quel est la valeur d'une listbox multiselect non selectionnée?
    Par jolzeviking dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/09/2008, 11h29
  3. [C#] récupérer une multiselection d'une listBox
    Par Nycos62 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 06/12/2005, 14h13
  4. Pb multiselect listbox builer C++
    Par Donniebrasko dans le forum C++Builder
    Réponses: 5
    Dernier message: 10/11/2004, 16h37
  5. [Canvas] Listbox, couleur et multiselect
    Par rbag dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/09/2002, 13h02

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