ListView之间的拖放功能的实现

ListView拖放功能实现与文件上传
本文介绍了如何实现ListView之间的拖放功能,涉及的关键步骤包括ItemDrag、DragEnter和DragDrop事件的处理。在DragEnter事件中设置DragDropEffects属性,区分Copy和Move操作。在DragDrop事件中,展示了如何调用文件上传方法将本地文件上传到远程服务器,您可以根据需求替换此部分代码。

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啦

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值