C#ListView拖放

时间:2015-01-14 15:44:41

标签: c# listview drag-and-drop

我正在尝试将ListViewItemListView拖放到Windows窗体应用程序中的另一个ListViews。我有两个lvImageFolderlvWebServerlvImageFolder。我正试图从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为空。我已经尝试将序列化对象传递给{{1}}方法,但这只给了我一些问题。

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

2 个答案:

答案 0 :(得分:0)

因为您使用列表视图项目位置[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;
    }
}

答案 1 :(得分:0)

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

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

将其更改为以下代码以拖动所选元素:

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