C#列表视图拖放
我正在尝试在Windows窗体应用程序中将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) {
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
中,您总是使用列表中第一个元素的文本。这是故意的吗?