C# 列表视图拖放
本文关键字:拖放 视图 列表 | 更新日期: 2023-09-27 18:37:26
我正在尝试将ListViewItem
从Windows表单应用程序中的一个ListView
拖放到另一个。我有两个ListViews
: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
方法,但这只给我带来了问题。
任何人都可以就这个问题有所了解吗?
更改下面的行有效,但正如 adv12 所写,始终复制第一项:
lvWebServer.DoDragDrop(lvImageFolder.Items[0].ToString(), DragDropEffects.Move);
将其更改为下面的代码以拖放所选元素:
lvWebServer.DoDragDrop(lvImageFolder.SelectedItem, DragDropEffects.Move);
因为您以列表视图项目位置 [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;
}
}