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# Discussion :

Dragdrop entre listview et listbox


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut Dragdrop entre listview et listbox
    Bonjour,

    Je tourne en rond depuis un moment sur un problème de drag&drop.
    J'ai un Listview qui affiche des noms de fichiers d'un répertoire.
    J'ai une listbox que je veux remplir en faisant glisser des éléments du listview.

    Voilà mon code :

    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
     
            private void FilesListView_ItemDrag(object sender, ItemDragEventArgs e)
            {
                this.FilesListView.DoDragDrop(FilesListView.SelectedItems, DragDropEffects.Copy);
            }
     
            private void listBox1_DragEnter(object sender, DragEventArgs e)
            {
                try
                {
                    ListView.SelectedListViewItemCollection items = (ListView.SelectedListViewItemCollection)e.Data;
                    e.Effect = DragDropEffects.Copy;
                }
                catch 
                {
                     e.Effect = DragDropEffects.None;
                }
            }
     
            private void listBox1_DragDrop(object sender, DragEventArgs e)
            {
                try
                {
                    ListView.SelectedListViewItemCollection items = (ListView.SelectedListViewItemCollection)e.Data;
                    foreach (var item in items)
                    {
                        listBox1.Items.Add((string)(item as ListViewItem).Tag);
                    }                
                }
                catch 
                {
                }            
            }
    Dans le dragenter, je ne passe jamais sur " e.Effect = DragDropEffects.Copy;" .
    Comme si l'élément passé n'était jamais dans e.data.

    Je dois louper un truc mais quoi ?

    Papy

    Bon, j'ai avancé un peu:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            private void listBox1_DragEnter(object sender, DragEventArgs e)
            {
                e.Effect = e.Data.GetDataPresent(typeof(ListViewItem)) ? DragDropEffects.Copy : DragDropEffects.None;
            }
     
            private void listBox1_DragDrop(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(typeof(ListViewItem)))
                {
                    ListViewItem item = (ListViewItem)e.Data;
                    listBox1.Items.Add((string)item.Tag);
                }
            }
    Maintenant DragEnter fonctionne. Mais dans le DragDrop, j'obtiens une erreur de CAST dans " ListViewItem item = (ListViewItem)e.Data;"

    Il parait que la conversion est impossible :-(

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    Pour récuperer les données tu ne dois pas oublier d'utiliser e.Data.GetData(), comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string mystring = (string)e.Data.GetData(DataFormats.StringFormat);

  3. #3
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Ah ok, merci ! J'ai corrigé comme suit et ça fonctionne impec.

    Merci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var item = e.Data.GetData(typeof(ListViewItem)) as ListViewItem;

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

Discussions similaires

  1. Drag and Drop entre ListView
    Par KoRiGaN44 dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 30/04/2009, 10h47
  2. Binding entre listview et combobox
    Par chris81 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 12/11/2008, 20h58
  3. slot entre image et listbox
    Par halouma dans le forum Qt
    Réponses: 1
    Dernier message: 09/04/2008, 20h33
  4. pb pour alignées des entrées dans une listbox
    Par zx10 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/11/2006, 19h30
  5. [VB2005] lien entre combobox et listbox
    Par Petrolia dans le forum Windows Forms
    Réponses: 20
    Dernier message: 04/06/2006, 14h28

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