none
还是文件拖动的问题 RRS feed

答案

  • 下面的代码展示了把文件下载到本地,然后从本地拖动到目标位置

            private void listViewFolder_ItemDrag(object sender, ItemDragEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    if (listViewFolder.SelectedItems.Count <= 0)
                    {
                        return;
                    }
    
                    //下载文件
                    string url = "  http://100.16.78.60:8009/1.jpg"; 
                     WebClient myWebClient = new WebClient(); 
                    myWebClient.DownloadFile(url,"C:\\1.jpg");
    
    
                    string[] files = new String[listViewFolder.SelectedItems.Count];
    
                    int i = 0;
                    foreach (ListViewItem item in listViewFolder.SelectedItems)
                    {
                        //把下载后文件的路径赋值给item.Tag ,然后从本地开始拖动
                        item.Tag = "C:\\1.jpg";
                        files[i++] = item.Tag.ToString();
                    }
    
                    DataObject data = new DataObject(DataFormats.FileDrop, files);
                    data.SetData(DataFormats.StringFormat, files[0]);
                    DoDragDrop(data, DragDropEffects.Copy);
                } 
            }


    http://blog.csdn.net/zx13525079024

    • 已标记为答案 male110 2012年10月25日 2:31
    2012年9月29日 3:21

全部回复

  • DoDragDrop(data, DragDropEffects.Copy)表示开始拖放操作

    data表示要拖的数据

    DragDropEffects表示操作方方式,最终的执行结果

    这里有个listview拖放文件DEMO,你下载看看

    http://www.cnblogs.com/eaglet/archive/2009/01/06/1370149.html


    http://blog.csdn.net/zx13525079024
    2010年7月16日 15:49
  • 你没明白我的意思...

    哦,你这里的data设置的是文件名.

    可是我是要从服务器上下载文件,文件是存到远程服务器上的.

    算了这个功能不做了.


    2010年7月17日 0:46
  • 关于上下载文件代码你要自己写,你主要是确定下什么时间上下载文件。

    你根据LISTVIEW的拖进拖出事件进行判断,当拖进LISTVIEW时,开始上传,当拖出LISTVIEW时,执行下载,

    上面的DEMO已经完成了文件的拖进拖出,你只用加上上下载文件方法就OK了

     

     


    http://blog.csdn.net/zx13525079024
    2010年7月17日 3:43
  • 是的,上面是有拖进,拖出.

    关键 是拖出的,你只是设置了拖动类型,没写代码完成拖出的复制操作对吧.

    当用户拖出一个文件,到本地目录时,我是不是要获取一个事件,还要知道用户是拖动到了哪个目录下?


    2010年7月17日 3:55
  • listViewFolder_DragDrop里你获取拖进来的文件名,然后循还复制文件

    foreach (string srcfile in files)

                    {

                        string destFile = labelCurFolder.Text + "\\" + System.IO.Path.GetFileName(srcfile);

                        if (System.IO.File.Exists(destFile))

                        {

                            if (MessageBox.Show(string.Format("This folder already contains a file named {0}, would you like to replace the existing file", System.IO.Path.GetFileName(srcfile)),

                                "Confirm File Replace", MessageBoxButtons.YesNo, MessageBoxIcon.None) != DialogResult.Yes)

                            {

                                continue;

                            }

                        }

     

                        System.IO.File.Copy(srcfile, destFile, true);

                    }

     

    关于拖出,你只是在listViewFolder_ItemDrag里DoDragDrop(data, DragDropEffects.Copy);设置了是什么操作,以极文件名.

    怎么知道拖动结束,并且是拖动到了本地的哪个目录呀?


    2010年7月17日 3:58
  •  

    最后放下的动作就是 drag drop,只要control allow drop 属性为true,你不管从哪里拖拽到control上,(如果你没设置其他的话)都会有那个拖拽的小方框的。 我不太清楚你是拖放到那里,很多control都有hittest 方法,用来判断最后的落点在 哪一行哪一列,通过抓取 hittestInfo 里面的信息。

    比如:

    DataGridView.HitTest Method http://msdn.microsoft.com/cn-zh/library/system.windows.forms.datagridview.hittest.aspx

    ListView.HitTest Method (Int32, Int32) http://msdn.microsoft.com/cn-zh/library/f7548bw9.aspx

     

    希望这个可以对这个问题有所帮助。 :)

     


    Please remember to click “Mark as Answer” on the post that helps you, and to click “Unmark as Answer” if a marked post does not actually answer your question. This can be beneficial to other community members reading the thread.
    2010年7月20日 10:52
    版主
  • 是从CTROL拖出到本地文件侠.

    就是把某个文件从服务器拖出到,本地文件侠(如我的电脑里某个目录时),我下载该文件到指定的目录.

    是拖出,拖出到我的电脑,本地文件侠.

    可以实现吗?


    2010年7月24日 0:45
  • 我也碰到同样的问题。不知道怎么解决。

    因为在ListView中存放着不是本地文档,而是远程文档。 本地文档拖放出来的时候是没有问题。

    但是是远程文档,就不好做。

    2012年9月29日 1:28
  • 这个DEMO中  拖放出来是用的本地文档。
    2012年9月29日 1:29
  • 如果listview显示的服务器端的路径,可以在拖出的时候,也就是在listViewFolder_ItemDrag事件中先将文件下载到应用程序的目录下,

    然后从应用程序的目录下拖出到目标位置。


    http://blog.csdn.net/zx13525079024

    2012年9月29日 2:09
  • 下面的代码展示了把文件下载到本地,然后从本地拖动到目标位置

            private void listViewFolder_ItemDrag(object sender, ItemDragEventArgs e)
            {
                if (e.Button == MouseButtons.Left)
                {
                    if (listViewFolder.SelectedItems.Count <= 0)
                    {
                        return;
                    }
    
                    //下载文件
                    string url = "  http://100.16.78.60:8009/1.jpg"; 
                     WebClient myWebClient = new WebClient(); 
                    myWebClient.DownloadFile(url,"C:\\1.jpg");
    
    
                    string[] files = new String[listViewFolder.SelectedItems.Count];
    
                    int i = 0;
                    foreach (ListViewItem item in listViewFolder.SelectedItems)
                    {
                        //把下载后文件的路径赋值给item.Tag ,然后从本地开始拖动
                        item.Tag = "C:\\1.jpg";
                        files[i++] = item.Tag.ToString();
                    }
    
                    DataObject data = new DataObject(DataFormats.FileDrop, files);
                    data.SetData(DataFormats.StringFormat, files[0]);
                    DoDragDrop(data, DragDropEffects.Copy);
                } 
            }


    http://blog.csdn.net/zx13525079024

    • 已标记为答案 male110 2012年10月25日 2:31
    2012年9月29日 3:21