none
Récupérer valeurs de 2 champs dans une listBox RRS feed

  • Question

  • Bonjour à tous,

    j'ai une listeBox dans laquelle je charge des données de ma base de données. J'affiche dedans le nom et le prénom. Je souhaites en cliquant sur le nom et le prénom d'une personne (de cette listbox) pouvoir récupérer son nom et son prénom séparément. Le problème c'est que quand je fais un 

    listBox1.SelectedItems

    il me retourne le nom et le prénom  d'un seul bloc.

    Comment puis-je faire pour séparer les 2 ?

    Merci pour votre aide !

    vendredi 17 août 2012 07:51

Réponses

  • Bonjour,

    Pourquoi ne pas insérer vos éléments dans la listBox avec un caractère identifiant comme un souligné ?

    Ensuite il vous suffira de splitter sur le caractère souligné comme ceci:

    namespace Listboxes
    {
      using System;
      using System.Windows.Forms;
    
      public partial class Form1 : Form
      {
        public Form1()
        {
          this.InitializeComponent();
        }
    
        private void Button1Click(object sender, EventArgs e)
        {
          this.listBox1.Items.Add("john_Smith");
          this.listBox1.Items.Add("joe_Black");
          this.listBox1.Items.Add("john_Smith");
          this.listBox1.Items.Add("joe_Black");
          this.listBox1.Items.Add("john_Smith");
          this.listBox1.Items.Add("joe_Black");
        }
    
        private void Button2Click(object sender, EventArgs e)
        {
          foreach (string item in this.listBox1.SelectedItems)
          {
            this.listBox2.Items.Add(item.Substring(0, item.IndexOf('_')));
            this.listBox2.Items.Add(item.Substring(item.IndexOf('_') + 1));
          }
        }
      }
    }


    fred on youTube
    PHP MySQL Web Site Creator
    fred

    vendredi 17 août 2012 17:20
  • Bonjour paintbox00,

    A la différence de fred75, j'utiliserai plutôt le caractère de tabulation comme séparateur :

    private void button1_Click(object sender, EventArgs e)
    {
            this.listBox1.MultiColumn = true;
            this.listBox1.Items.Add("john\tSmith");
            this.listBox1.Items.Add("joe\tBlack");
            this.listBox1.Items.Add("john\tSmith");
            this.listBox1.Items.Add("joe\tBlack");
            this.listBox1.Items.Add("john\tSmith");
            this.listBox1.Items.Add("joe\tBlack");
    }
    
    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
            String s = this.listBox1.SelectedItem as String;
            String[] t = s.Split(new Char[] { '\t' });
            MessageBox.Show("Nom : " + t[0] + "\nPrénom : " + t[1]);
    }

    pour des raisons visuelles.

    Mais à mon avis pour du multi-colonnes le contrôle ListView en mode détail est plus adapté.


    Cordialement, Jacques

    vendredi 17 août 2012 23:45
  • Bonjour,

    Ou une autre option est d'utiliser des "vrais" objets ce qui supprime tout besoin de séparer quoi que ce soit et donne accès à tout cde dont l'objet présenté dans la liste dispose. Par exemple :

            public Form1()
            {
                InitializeComponent();
                List<Personne> p = new List<Personne> { new Personne { Prénom = "Victor", Nom = "Hugo" }, new Personne { Prénom = "Jack", Nom = "London" } };
                comboBox1.DisplayMember = "NomComplet";
                comboBox1.DataSource = p;
            }
            class Personne
            {
                public string Nom {get;set;}
                public string Prénom {get;set;}
                public string NomComplet { get { return Prénom + " " + Nom; } }
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                var o = (Personne)comboBox1.SelectedItem;
                MessageBox.Show("Vous avez choisi " + o.Nom + ".");
            }


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    samedi 18 août 2012 11:54
    Modérateur

Toutes les réponses

  • Bonjour,

    Pourquoi ne pas insérer vos éléments dans la listBox avec un caractère identifiant comme un souligné ?

    Ensuite il vous suffira de splitter sur le caractère souligné comme ceci:

    namespace Listboxes
    {
      using System;
      using System.Windows.Forms;
    
      public partial class Form1 : Form
      {
        public Form1()
        {
          this.InitializeComponent();
        }
    
        private void Button1Click(object sender, EventArgs e)
        {
          this.listBox1.Items.Add("john_Smith");
          this.listBox1.Items.Add("joe_Black");
          this.listBox1.Items.Add("john_Smith");
          this.listBox1.Items.Add("joe_Black");
          this.listBox1.Items.Add("john_Smith");
          this.listBox1.Items.Add("joe_Black");
        }
    
        private void Button2Click(object sender, EventArgs e)
        {
          foreach (string item in this.listBox1.SelectedItems)
          {
            this.listBox2.Items.Add(item.Substring(0, item.IndexOf('_')));
            this.listBox2.Items.Add(item.Substring(item.IndexOf('_') + 1));
          }
        }
      }
    }


    fred on youTube
    PHP MySQL Web Site Creator
    fred

    vendredi 17 août 2012 17:20
  • Bonjour paintbox00,

    A la différence de fred75, j'utiliserai plutôt le caractère de tabulation comme séparateur :

    private void button1_Click(object sender, EventArgs e)
    {
            this.listBox1.MultiColumn = true;
            this.listBox1.Items.Add("john\tSmith");
            this.listBox1.Items.Add("joe\tBlack");
            this.listBox1.Items.Add("john\tSmith");
            this.listBox1.Items.Add("joe\tBlack");
            this.listBox1.Items.Add("john\tSmith");
            this.listBox1.Items.Add("joe\tBlack");
    }
    
    private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
            String s = this.listBox1.SelectedItem as String;
            String[] t = s.Split(new Char[] { '\t' });
            MessageBox.Show("Nom : " + t[0] + "\nPrénom : " + t[1]);
    }

    pour des raisons visuelles.

    Mais à mon avis pour du multi-colonnes le contrôle ListView en mode détail est plus adapté.


    Cordialement, Jacques

    vendredi 17 août 2012 23:45
  • Bonjour,

    Ou une autre option est d'utiliser des "vrais" objets ce qui supprime tout besoin de séparer quoi que ce soit et donne accès à tout cde dont l'objet présenté dans la liste dispose. Par exemple :

            public Form1()
            {
                InitializeComponent();
                List<Personne> p = new List<Personne> { new Personne { Prénom = "Victor", Nom = "Hugo" }, new Personne { Prénom = "Jack", Nom = "London" } };
                comboBox1.DisplayMember = "NomComplet";
                comboBox1.DataSource = p;
            }
            class Personne
            {
                public string Nom {get;set;}
                public string Prénom {get;set;}
                public string NomComplet { get { return Prénom + " " + Nom; } }
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                var o = (Personne)comboBox1.SelectedItem;
                MessageBox.Show("Vous avez choisi " + o.Nom + ".");
            }


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".

    samedi 18 août 2012 11:54
    Modérateur
  • Bonjour,

    merci à tous pour vos réponses et conseils. J'ai finalement utilisé la méthode proposées par Patrice.

    Cela fonctionne finalement.

    Encore merci à tous !

    mercredi 22 août 2012 20:17