C# 列表视图拖放

本文关键字:拖放 视图 列表 | 更新日期: 2023-09-27 18:37:26

我正在尝试将ListViewItem从Windows表单应用程序中的一个ListView拖放到另一个。我有两个ListViewslvImageFolderlvWebServer。我试图从lvImageFolder拖到lvWebServer.

我的代码如下所示:

private void lvImageFolder_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        txtCursor.Text = Cursor.Position.ToString();
        lvWebServer.DoDragDrop(lvImageFolder.Items[0].Text, DragDropEffects.Move);
    }
}
private void lvWebServer_DragDrop(object sender, DragEventArgs e)
{
    string dragToItem = e.Data.GetData(DataFormats.Text).ToString();
    lvWebServer.Items.Add(dragToItem);
}
private void lvWebServer_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.Text))
    {
        e.Effect = DragDropEffects.Move;
    }
    else
    {
        e.Effect = DragDropEffects.None;
    }   
}

我遇到的问题是字符串dragToItem为空。我也尝试将序列化对象传递给 DoDragDrop 方法,但这只给我带来了问题。

任何人都可以就这个问题有所了解吗?

C# 列表视图拖放

更改下面的行有效,但正如 adv12 所写,始终复制第一项:

lvWebServer.DoDragDrop(lvImageFolder.Items[0].ToString(), DragDropEffects.Move);

将其更改为下面的代码以拖放所选元素:

lvWebServer.DoDragDrop(lvImageFolder.SelectedItem, DragDropEffects.Move);

因为您以列表视图项目位置 [0] 开始拖放,并且可能它是一个空项目。您应该从列表视图的选定项目开始拖放,例如:

private void lvImageFolder_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        //txtCursor.Text = Cursor.Position.ToString();
        if (lvImageFolder.SelectedItems.Count > 0)
        {
            var lst = new List<string>();
            foreach (ListViewItem item in lvImageFolder.SelectedItems)
            {
                lst.Add(item.Text);
            }
            lvWebServer.DoDragDrop(lst, DragDropEffects.Move);
        }
    }
}
private void lvWebServer_DragDrop(object sender, DragEventArgs e)
{
    List<string> lst = e.Data.GetData(typeof(List<string>)) as List<string>;
    foreach (var item in lst)
    {
        lvWebServer.Items.Add(item);
    }
}
private void lvWebServer_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(typeof(List<string>)))
    {
        e.Effect = DragDropEffects.Move;
    }
    else
    {
        e.Effect = DragDropEffects.None;
    }
}