好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

C#WinForm实现文件的拖入和拖出.doc

9页
  • 卖家[上传人]:飞***
  • 文档编号:32911882
  • 上传时间:2018-02-13
  • 文档格式:DOC
  • 文档大小:42.50KB
  • / 9 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • C# WinForm 实现文件的拖入和拖出在 WinForm 实现一个类似资源浏览器的功能,需要实现将 WinForm 中列出的文件拖出到其他应用程序中或者从其他应用程序中将文件拖入到 Winform 应用中网上有一些文章介绍这种功能,但都比较零散,缺少一个完整的例子为此我编写了一个较完整的实现文件拖入和拖出的例子,并撰写此文一步步讲解如果实现类似功能 步骤 1 放置一个 ListView 到 Winform 窗体中 并初始化如下属性: listView.View = View.Details; listView.AllowDrop = true ; 步骤 2 撰写一个目录文件列表显示的函数 /**/ /// /// List files in the folder /// /// the directory of the folder private void ListFolder( string directory) { labelCurFolder.Text = directory; String[] fileList = System.IO.Directory.GetFiles(directory); listViewFolder.Items.Clear(); listViewFolder.Columns.Clear(); listViewFolder.Columns.Add( " Name " , 300 ); listViewFolder.Columns.Add( " Size " , 100 ); listViewFolder.Columns.Add( " Time " , 200 ); foreach ( string fileName in fileList) { // Show file name ListViewItem itemName = new ListViewItem(System.IO.Path.GetFileName(fileName)); itemName.Tag = fileName; // Show file icon IconImageProvider iconImageProvider = new IconImageProvider(listViewFolder.SmallImageList, listViewFolder.LargeImageList); itemName.ImageIndex = iconImageProvider.GetIconImageIndex(fileName); // Show file size System.IO.FileInfo fileInfo = new System.IO.FileInfo(fileName); long size = fileInfo.Length; String strSize; if (size < 1024 ) { strSize = size.ToString(); } else if (size < 1024 * 1024 ) { strSize = String.Format( " {0:###.##}KB " , ( float )size / 1024 ); } else if (size < 1024 * 1024 * 1024 ) { strSize = String.Format( " {0:###.##}MB " , ( float )size / ( 1024 * 1024 )); } else { strSize = String.Format( " {0:###.##}GB " , ( float )size / ( 1024 * 1024 * 1024 )); } ListViewItem.ListViewSubItem subItem = new ListViewItem.ListViewSubItem(); subItem.Text = strSize; subItem.Tag = size; itemName.SubItems.Add(subItem); // Show file time subItem = new ListViewItem.ListViewSubItem(); DateTime fileTime = System.IO.File.GetLastWriteTime(fileName); subItem.Text = ( string )fileTime.ToLocalTime().ToString( " yyyy-MM-dd HH:mm:ss " ); ; subItem.Tag = fileTime; itemName.SubItems.Add(subItem); listViewFolder.Items.Add(itemName); } } 上面代码中有一段显示图标的代码由于和拖动无关,我就不贴出来了,感兴趣可以下载完整的代码去看。

      步骤 3 为 ListView 添加 DragEnter 事件 DragEnter 事件在其他应用程序拖入的文件进入时判断当前拖动的对象类型,如果是文件类型,则设置拖动响应类型为 Copy. private void listViewFolder_DragEnter( object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } } 步骤 4 为 ListView 添加 DragDrop 事件 DragDrop 事件在这里完成将其他应用程序拖入的文件拷贝到 Winform 应用当前的目录中private void listViewFolder_DragDrop( object sender, DragEventArgs e) { try { String[] files = e.Data.GetData(DataFormats.FileDrop, false ) as String[]; // Copy file from external application 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 ); } // List current folder ListFolder(); } catch (Exception e1) { MessageBox.Show(e1.Message, " Error " , MessageBoxButtons.OK, MessageBoxIcon.Error); } } 完成上述 4 步后,拖入功能就实现了。

      下面步骤完成拖出功能 步骤 5 为 ListView 添加 ItemDrag 事件 这个事件在 ListView 的 Item 被拖动时响应,我们利用这个事件将当前选中的 item对应的文件名复制到拖动数据中, 并调用窗体的 DoDragDrop 方法告知窗体现在开始做拖放操作 private void listViewFolder_ItemDrag( object sender, ItemDragEventArgs e) { if (e.Button == MouseButtons.Left){ if (listViewFolder.SelectedItems.Count <= 0 ) { return ; } // put selected files into a string array string [] files = new String[listViewFolder.SelectedItems.Count]; int i = 0 ; foreach (ListViewItem item in listViewFolder.SelectedItems) { files[i ++ ] = item.Tag.ToString(); } // create a dataobject holding this array as a filedrop DataObject data = new DataObject(DataFormats.FileDrop, files); // also add the selection as textdata data.SetData(DataFormats.StringFormat, files[ 0 ]); // Do DragDrop DoDragDrop(data, DragDropEffects.Copy); } } } 完成了步骤 5,拖出功能也实现了。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.