首页 > 解决方案 > 拖放时从一个 ListView 拖放到另一个,文本更改

问题描述

当我尝试将一个项目从一个项目拖到另一个项目listview时,丢弃时的数据说 System.Windows.Forms.ListView+SelectedListViewItemCollection,但我让它添加了文本ToString。代码:

private void CompletedList_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.Text))
    {
        e.Effect = DragDropEffects.Copy;
    }
    else
    {
        e.Effect = DragDropEffects.None;
    }
}

private void ShipList_MouseDown(object sender, MouseEventArgs e)
{
    CompletedList.DoDragDrop(ShipList.SelectedItems.ToString(), DragDropEffects.Copy);
}

private void CompletedList_DragDrop(Object sender, DragEventArgs e)
{
    CompletedList.Items.Add(e.Data.GetData(DataFormats.Text).ToString());
    //ShipList.Items.Remove(e.Data.GetData())
}

ps 我知道已ShipList.Items.Remove被注释掉,我仍在研究如何在将数据放入第二个框中时从第一个框中删除数据

标签: c#drag-and-drop

解决方案


下面的代码是一个简单的例子。它不适用于名称重复或名称中包含逗号的列表项。它应该让您知道如何开始。

    public Form1()
    {
        InitializeComponent();
        for (int i = 0; i < 10; i++)
            ShipList.Items.Add($"My Item {i}");
    }

    private void CompletedList_DragEnter(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(DataFormats.Text))
        {
            e.Effect = DragDropEffects.Copy;
        }
        else
        {
            e.Effect = DragDropEffects.None;
        }
    }

    private void CompletedList_DragDrop(object sender, DragEventArgs e)
    {
        var listOfItems = e.Data.GetData(DataFormats.Text).ToString().Split(new char[] { ',' });
        foreach (string itemText in listOfItems)
        {
            CompletedList.Items.Add(itemText);
            foreach (ListViewItem shipItem in ShipList.Items)
            {
                if (shipItem.Text == itemText)
                {
                    ShipList.Items.Remove(shipItem);
                    break;
                }
            }
        }
    }

    private void ShipList_ItemDrag(object sender, ItemDragEventArgs e)
    {
        if (ShipList.SelectedItems.Count == 0) return;

        var selectedListNames = new List<string>();

        foreach (ListViewItem item in ShipList.SelectedItems)
            selectedListNames.Add(item.Text);

        CompletedList.DoDragDrop(string.Join(",", selectedListNames), DragDropEffects.Copy);
    }

推荐阅读