Partage
  • Partager sur Facebook
  • Partager sur Twitter

C# - Copier une partie d'un item sélectionné..

    13 mai 2011 à 4:00:54

    .. d'une listbox vers une autre listbox.

    Bonjour !

    Mon problème peut paraître compliqué mais en fait il est tout simple. Il y a deux listbox, "lst1" et "lst2", je désire copier des chiffres d'un item sélectionné qui figurent dans "lst1" pour les ajouter à la fin d'un autre item sélectionné de "lst2".

    Comme une image vaut mille mots: http://upload.kuunavang.com/images/5555555555555.png
    Deux items sélectionnés, un transfert. L'item sélectionné serait "unNom 2801 19049" après le transfert.

    Les informations de la chaîne viennent d'une méthode ToString d'une classe.

    public override string ToString()
            {
                string description = String.Format("{0,-20} {1,-20} {2,-8}", destination, nomBateau, noCrois);
                return description;
            }
    



    Je viens de tâter un petit code vite fait. Bon c'est bidouillé pas mal, il ne marche pas à cause du Split. J'ai aucune idée de quoi mettre à l'intérieur afin qu'il puisse détecter l'espace vide dans l'item sélectionné afin qu'il puisse faire les séparations.

    // Isoler chaque champ de l'élément de l'item sélectioné
                string[] vch = lst1.SelectedIndex.ToString().Split();
    
                // Isoler le premier nombre
                int premNb = int.Parse(vch[2]);
    
                // Ajout de la chaîne sélectionée ainsi que du numéro de réservation dans une variable
                string somme = lst2.SelectedIndex.ToString() + int.Parse(vch[1]);
    
                // Remplace la chaîne sélectionée par la variable
                lst1.SelectedIndex = int.Parse(somme);
    

    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      14 mai 2011 à 14:26:55

      Tu confonds SelectedIndex et SelectedItem. ;)
      SelectedIndex renvoie le numéro de ligne sélectionnée, tandis que SelectedItem renvoie l'objet correspondant.

      Je ne sais pas quel est le type des objets que tu affiches dans ta première listbox (ceux dont tu montres la méthode ToString), mais à priori il suffirait de caster l'objet SelectedItem en ce type de données pour exploiter directement ses propriétés Destination, NomBateau et NoCrois. Du coup, pas de split à faire :)
      • Partager sur Facebook
      • Partager sur Twitter
        15 mai 2011 à 0:54:56

        Haaaaaaaan okay, merci !

        Un p'tit tuto pour savoir comment faire ça ? :p
        • Partager sur Facebook
        • Partager sur Twitter
          16 mai 2011 à 8:28:46

          Prenons une classe

          public class Student
              {
                  private string _surname;
                  private int _age;
          
                  public string Surname
                  {
                      get { return _surname; }
                      set { _surname = value; }
                  }
          
                  public int Age
                  {
                      get { return _age; }
                      set { _age = value; }
                  }
          
                  public override string ToString()
                  {
                      return string.Format("Eleve {0} d'age {1}", Surname, Age);
                  }
              }
          



          Tu peut directement associer une collection ou un tableau ( tant que ça implémente IList) au contrôle.

          public partial class Form1 : Form
              {
                  public Form1()
                  {
                      InitializeComponent();
          
                      var eleves = new List<Student>(35);
                      eleves.Add(new Student { Surname = "Marcel", Age = 15 });
                      eleves.Add(new Student { Surname = "Jean", Age = 18 });
                      eleves.Add(new Student { Surname = "Paul", Age = 12 });
          
                      listBox1.DataSource = eleves;
                      listBox1.SelectedValueChanged += ListBox1SelectedValueChanged;
                  }
          
                  void ListBox1SelectedValueChanged(object sender, EventArgs e)
                  {
                      var selectedStudent = listBox1.SelectedItem;
                  }
              }
          


          Dans ce code, je ne précise pas à la listBox qu'elle champ afficher, elle va donc afficher Eleve.ToString(); par défaut. Tu peut préciser un champ particulier avec listBox.DisplayMember = "champName"
          • Partager sur Facebook
          • Partager sur Twitter
            16 mai 2011 à 13:13:30

            C'est effectivement ça, sauf que dans:

            void ListBox1SelectedValueChanged(object sender, EventArgs e)
            {
                var selectedStudent = listBox1.SelectedItem;
            }
            

            Le mot-clé "var" ne dispense pas de caster l'objet SelectedItem en Student pour pouvoir accéder à ses propriétés :)
            Ca serait donc plutôt:

            var selectedStudent = listBox1.SelectedItem as Student;
            

            ;)
            • Partager sur Facebook
            • Partager sur Twitter

            C# - Copier une partie d'un item sélectionné..

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown