【问题标题】:C# ListView Drag and DropC# ListView 拖放
【发布时间】:2015-01-14 15:44:41
【问题描述】:

我正在尝试在 Windows 窗体应用程序中将 ListViewItem 从一个 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 方法,但这给了我什么问题。

谁能解释一下这个问题?

【问题讨论】:

  • 我注意到lvImageFolder_MouseDown 你总是使用列表中第一个元素的文本。这是故意的吗?

标签: c# listview drag-and-drop


【解决方案1】:

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

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

改成下面的代码拖拽选中的元素:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 2011-09-26
      • 2018-12-23
      相关资源
      最近更新 更多