我有一个小型文件浏览器应用程序 [WINFORMS],我使用 ListView 控件来浏览项目。
因此 listView 显示当前地址 [From local Computer] 中的文件和文件夹。
我需要启用拖放功能以让文件/文件夹轻松移动/复制到同一地址中的另一个文件夹。每个项目都有一些特点:
"13.45 MB"
,对于文件夹,它将是string.Empty
[但是,有几种方法可以知道它是文件还是文件夹]。
我看过很多关于如何在 listview 中使用拖放的教程,但这就像从 Windows 文件资源管理器到 ListView,或者从 ListView 到另一个,但在我的情况下,我需要知道如何在同一个 ListView 中拖放。
我已启用 ListView 的 AllowDrop 属性。并且还激活了以下功能:
private void listView1_DragDrop(object sender, DragEventArgs e)
{
}
private void listView1_DragEnter(object sender, DragEventArgs e)
{
}
private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
{
}
更新:
我试着用这个:
private void listView1_DragDrop(object sender, DragEventArgs e)
{
ListViewItem item = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); //this should be the target item (FOLDER)
StringBuilder s = new StringBuilder();
foreach (ListViewItem i in listView1.SelectedItems)
{
s.AppendLine(i.Text);
}
MessageBox.Show("DRAGGED ITEM : " + s.ToString() + "TARGET ITEM : " + item.Text);
}
private void listView1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
}
private void listView1_MouseDown(object sender, MouseEventArgs e)
{
var item = listView1.GetItemAt(e.X, e.Y);
if (item != null)
{
listView1.DoDragDrop(item, DragDropEffects.Copy);
}
}
在listView1_MouseDown
我得到鼠标指向的项目,但它在我放下拖动的项目之前给了我项目,所以如果我将一个名为“SWImg”的文件夹拖到文件夹“ODDFiles”,消息框显示"SWImg - SWImg"
然后我替换listView1_MouseDown
为listView1_ItemDrag
:
private void listView1_ItemDrag(object sender, ItemDragEventArgs e)
{
if (e.Item != null)
{
listView1.DoDragDrop(e.Item, DragDropEffects.Copy);
}
}
同样的结果:S。