我正在尝试将ListViewItem
从ListView
拖放到Windows窗体应用程序中的另一个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
为空。我已经尝试将序列化对象传递给{{1}}方法,但这只给了我一些问题。
任何人都可以对这个问题有所了解吗?
答案 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);