Перетаскивание из одного ListView в другой, когда отбрасывается текст меняется - PullRequest
0 голосов
/ 03 апреля 2020

, когда я пытаюсь перетащить элемент из одного 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 закомментирован, я все еще работаю над тем, как удалить данные из первого ящика, когда они попадают во второй ящик

1 Ответ

0 голосов
/ 03 апреля 2020

Следующий код является простым примером. Он не будет работать для элементов списка, которые имеют повторяющиеся имена или содержат запятые в названии. Это должно дать вам представление о том, как начать.

    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);
    }
...