在同一应用程序的实例之间拖放。 (的Winforms)

时间:2015-09-16 16:34:08

标签: c# drag-and-drop

我有一个带有ListView的应用程序,我从资源管理器中删除了一些文件。 Object被视为FileDrop,因此,我可以使用我放入的所有项目的名称,扩展名和完整路径填充ListView。当我将ListView项目从第一个应用程序拖动到同一个应用程序的第二个实例的ListView时,问题就出现了。该项目作为System .__ ComObject传递,而不是像我想象的那样传递。

如何(以及在​​何处)我可以在这两个不同的ListView之间拖动一个项目,每个ListView在他们自己的应用程序中,像FileDrop或纯文本一样传递它?

我读了很多关于序列化和其他一些例子的内容,但是对于自我教导似乎都不是很友好...

 private void Playlist_ItemDrag(object sender, ItemDragEventArgs e)
    {

        Playlist.DoDragDrop(Playlist.SelectedItems[0].SubItems[4].Text, DragDropEffects.Move);

    }

更多代码:

private void Playlist_DragOver(object sender, DragEventArgs e)
    {


        if (e.Data.GetDataPresent(DataFormats.Text) || e.Data.GetDataPresent(DataFormats.FileDrop))
        {
            if (e.Data.GetDataPresent(DataFormats.FileDrop)) { this.Externo = true; }
            if (e.Data.GetDataPresent(DataFormats.Text)) { this.Externo = false; }

            Point cp = Playlist.PointToClient(new Point(e.X, e.Y));
            ListViewItem hoverItem = Playlist.GetItemAt(cp.X, cp.Y);


            if (hoverItem == null)
            {
                e.Effect = DragDropEffects.Copy;
                return;
            }

            foreach (ListViewItem moveItem in Playlist.SelectedItems)
            {

                if (moveItem.Index == hoverItem.Index)
                {
                    e.Effect = DragDropEffects.Move;
                    hoverItem.EnsureVisible();

                    return;
                }
            }
            e.Effect = DragDropEffects.Move;
            hoverItem.EnsureVisible();
        }

    }

- 外部或文字 - '如果'声明只是说是否来自ListView内部(因此它将重新排序ListView项目)或来自资源管理器,(因此它会将项目添加到悬停位置)。

谢谢!

0 个答案:

没有答案