C#列表视图拖放

C#列表视图拖放,c#,listview,drag-and-drop,C#,Listview,Drag And Drop,我正在尝试在Windows窗体应用程序中将ListViewItem从一个ListView拖放到另一个。我有两个列表视图:lvImageFolder和lvWebServer。我正试图从lvImageFolder拖动到lvWebServer 我的代码如下所示: private void lvImageFolder_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) {

我正在尝试在Windows窗体应用程序中将
ListViewItem
从一个
ListView
拖放到另一个
。我有两个
列表视图
lvImageFolder
lvWebServer
。我正试图从
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
方法,但这只会给我带来问题


有人能解释一下这个问题吗?

因为您从列表视图项位置[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;
    }
}
private void lvImageFolder\u MouseDown(对象发送方,MouseEventArgs e)
{
if(e.Button==MouseButtons.Left)
{
//txtCursor.Text=Cursor.Position.ToString();
如果(lvImageFolder.SelectedItems.Count>0)
{
var lst=新列表();
foreach(lvImageFolder中的ListViewItem项。选择EditEMS)
{
第一次添加(项目文本);
}
lvWebServer.DoDragDrop(lst,DragDropEffects.Move);
}
}
}
私有void lvWebServer_DragDrop(对象发送方,DragEventArgs e)
{
List lst=e.Data.GetData(typeof(List))作为列表;
foreach(lst中的var项目)
{
lvWebServer.Items.Add(item);
}
}
私有void lvWebServer_DragEnter(对象发送方,DragEventArgs e)
{
if(例如Data.GetDataPresent(typeof(List)))
{
e、 效果=DragDropEffects.Move;
}
其他的
{
e、 效果=DragDropEffects。无;
}
}

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

lvWebServer.DoDragDrop(lvImageFolder.Items[0].ToString(), DragDropEffects.Move);
将其更改为以下代码以拖动选定元素:

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

我注意到在
lvImageFolder\u MouseDown
中,您总是使用列表中第一个元素的文本。这是故意的吗?