ListView之间的拖放功能的实现主要是要实现三个事件:ItemDrag,DragEnter,DragDrop.这三个事件只有第一个事件是当前listview触发的。其它的两个都是由目标listview控件触发的。下面是我源代码:
ItemDrag事件
private void lvLocalFile_ItemDrag(object sender, ItemDragEventArgs e)
...{
//如果是鼠标右键则返回
if (e.Button == MouseButtons.Right)
...{
return;
}
//判断当前控件里是否有item,如果没有则返回
if (lvLocalFile.SelectedIndices.Count <= 0)
...{
return;
}
IEnumerator selCol = lvLocalFile.SelectedItems.GetEnumerator();
selCol.MoveNext();
ListViewItem item = (ListViewItem)selCol.Current;
string path = cmbLocalPath.Text + item.Text;
if (item != null)
...{
path = path.IndexOf(".",0)==-1?path + @"":path;
lvLocalFile.DoDragDrop(path, DragDropEffects.Copy);
}
}
DragEnter事件源代码:
//远程文件列表有item拖进时事件
private void lvRemoteFile_DragEnter(object sender, DragEventArgs e)
...{
if (e.Data.GetDataPresent(DataFormats.Text))
...{
e.Effect = DragDropEffects.Copy;
}
else
...{
e.Effect = DragDropEffects.None;
}
}在这个事件是。你需要设置DragDropEffects属性。这个里有几个可以选择的。但我们较常的用的一般就是Copy和Move,Copy就是在目标listview里创建一个源listveiw的副本。而Move则是在目标listview 里创建源listveiw里的item一个副本的同时将源listeview里的item删除。
DragDrop事件的源代码:
//远程文件列表的DragDrop事件
private void lvRemoteFile_DragDrop(object sender, DragEventArgs e)
...{
string path = e.Data.GetData(DataFormats.Text).ToString();
//下面开始上传文件,本地中径为path,远程路径cmbRemotePath.Text
ArrayList paths = new ArrayList();
paths.Add(path);
paths.Add(cmbRemotePath.Text+Path.GetFileName(path));
ThreadPool.QueueUserWorkItem(UpLoad,paths);
}因为在此事件中我是打算从本地上传文件到远程服务器上。所以我就在这里调用上传的方法。您们可以将本方法里的注释以后的代码换成您自已需要代码就OK啦
ListView拖放功能实现与文件上传
本文介绍了如何实现ListView之间的拖放功能,涉及的关键步骤包括ItemDrag、DragEnter和DragDrop事件的处理。在DragEnter事件中设置DragDropEffects属性,区分Copy和Move操作。在DragDrop事件中,展示了如何调用文件上传方法将本地文件上传到远程服务器,您可以根据需求替换此部分代码。
292

被折叠的 条评论
为什么被折叠?



