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

Windows Forms Discussion :

[C#] récupérer une multiselection d'une listBox


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut [C#] récupérer une multiselection d'une listBox
    Bonjour,

    je ne sait pas comment récupérer les élèments sélectionnés d'une listBox

    Je sais qu'il faut passer par ListBox1.SelectedItems qui est de type ListBox.SelectedObjectCollection (qui au passage n'apparaît pas dans la complétion automatique de visual studio 2003)

    je sais faire un .Count pour compter les élèments, mais je n'arrive pas à les obtenir, ... help

    merci

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    ok montres moi le code que tu as déjà tenté on vas voir comment t'aider
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    bein en fait, je veu faire un Drag & Drop (entre 2 ListBox) d'une multi selection.

    listBox source : ListBox4
    listBox destination : ListBox1

    sur l'évenement mouse_down de ListBox4 je met dans mon e.Data du drag & drop mes items selectionné : listbox4.selectedItems

    et dans mon drop sur la listBox1, je veu mettre les listBox4.selectedItems dans ma listBox1 :

    voici la partie du code concernée :
    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
     
    private void listBox4_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    		{
    			if(listBox4.Items.Count==0) return; 
    			listBox4.DoDragDrop(listBox4.SelectedItems,DragDropEffects.Copy);
    		}
     
    private void listBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    		{
    			if (e.Data == null)
    			{
    				return;
    			}
     
    			foreach (object i in ((System.Windows.Forms.ListBox.SelectedObjectCollection)e.Data.GetData(DataFormats."? je ne sais pas ")))
    			{
    				listBox1.Items.Add(i.ToString());				
    			}		
    		}

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    ok
    tu as e.Data.GetFormats pour extraire le tableau de tous les formats dans lesquels les données sont disponibles

    histoire que tu trouves par toi même
    autre indice peut être tu pourras faire directement un AddRange
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    j'ai essayé avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.Data.GetDataPresent("System.Windows.Forms.ListBox.SelectedObjectCollection");
    mais il ne reconnait pas ce format.

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listBox1.Items.AddRange(listBox4.SelectedItems);
    ne fonctionne pas

    editer par neguib

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par Nycos62
    j'ai essayé avec le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.Data.GetFormats("System.Windows.Forms.ListBox.SelectedObjectCollection")
    mais il ne reconnait pas ce format.
    Ben commences par faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show(String.Join(System.Environment.NewLine, e.Data.GetFormats));

    et envoies nous la liste que tu récupères

    Méthode IDataObject.GetFormats ()
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut


    j'obtiens le format : "System.Windows.Forms.ListBox+SelectedObjectCollection". Donc apparemment, une partie du problème serai du au "+".

    Mais je ne sais toujours pas comment récupérer les Items sélectionné d'une listbox (avec multi selection)

  8. #8
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Donc essayes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private void listBox1_DragDrop(object sender, DragEventArgs e)
    {
      if (e.Data != null)
      {
        Type t;
        t = System.Type.GetType("System.Windows.Forms.ListBox.SelectedObjectCollection");
        listBox1.Items.AddRange((ListBox.ObjectCollection)e.Data.GetData(t));
      }		
    }
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 93
    Points : 61
    Points
    61
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t = System.Type.GetType("System.Windows.Forms.ListBox.SelectedObjectCollection");
    t ne s'initialise pas.

    et le cast de e.Data en (ListBox.ObjectCollection) n'est pas valide, car le framework ne sait pas convertir un ObjectCollection en SelectedObjectCollection.

    Grand merci, mais la voie de la raison l'a finalement emportée, et j'ai utilisé des ListView au lieu des ListBox à Bilou pas très coopérantes.

    pour les listView, rien de plus facile :

    listView1 : source

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void listView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
    		{
    			listView1.DoDragDrop(listView1.SelectedItems,DragDropEffects.Copy);
    		}
    listView2 : destination

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private void listView2_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
    		{
    			e.Effect = DragDropEffects.All;
    		}
     
    private void listView2_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    		{
    			System.Windows.Forms.ListView.SelectedListViewItemCollection lvis = (System.Windows.Forms.ListView.SelectedListViewItemCollection)e.Data.GetData(typeof(System.Windows.Forms.ListView.SelectedListViewItemCollection));
    			foreach(ListViewItem lvi in lvis)
    			{
    				this.listView2.Items.Add(new ListViewItem(lvi.Text));
    			}
    		}
    (ne pas oublier de mettre allowDrop à True dans les 2 contrôles)

  10. #10
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    pensess au tag la prochaine fois stp
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

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

Discussions similaires

  1. [SP-2010] récupérer les terme d'une colonne d'une liste dans une autre liste
    Par Noruk dans le forum SharePoint
    Réponses: 2
    Dernier message: 09/02/2015, 18h15
  2. [WD16] Récupérer la valeur d'une colonne d'une table d'une ligne précise
    Par elghers_hocine dans le forum WinDev
    Réponses: 16
    Dernier message: 06/05/2011, 18h11
  3. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  4. Récupérer le nom d'une colonne d'une table dans une variable
    Par mimi51340 dans le forum Général Java
    Réponses: 4
    Dernier message: 13/03/2008, 14h23
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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