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 :-(