日期:2014-05-20  浏览次数:20765 次

如何实现像rar的拖放功能,要拖放后解压数据的
注意:是把程序里的数据拖到桌面或文件夹的,内部拖放的答案就别来浪费时间了很简单的, 
光拖放也很简单也不用来乱了, 
具体:用户拖放后左 键弹起时开始出来解压进度条,数据解压后存放到临时文件夹,然后拖放完成,解压后文件复制到用户拖放的目标文件夹 
最好是C#的解决方法哈, 
网上搜了无数,实在是找不到这类方法的解了,英文不大好,CSDN里没搜到...找到的都是拖进控件的... 
研究了好久,高手们别笑啊,我就分享下拖放出去的经验,如果不存在解压,把文件拖放到桌面是很简单的,直接用DoDragDrop,然后把数据填成WINDOWS的文件类型,系统就自动完成拖放了,不过中间有个解压问题就来了,希望高手们不吝给个法子哈,,搞了几天了,,累死了

------解决方案--------------------
下面是转贴的代码,主要说明Drag Drop过程需要处理的事项。
其实lz已经找到了方法,只是很多案例是拖放到控件,而不是进行目录和文件操作的。其实是一样的,只是修改拖放所激发的过程就行了!

再简单一些,可以通过执行带参数的命令行解压文件到指定的目录即可。

C# code
 
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace DragDrop
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.ListBox listBox1;
private System.Windows.Forms.ListBox listBox2;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;

public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
  if (components != null)
  {
  components.Dispose();
  }
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.listBox1 = new System.Windows.Forms.ListBox();
this.listBox2 = new System.Windows.Forms.ListBox();
this.SuspendLayout();
//
// listBox1
//
this.listBox1.ItemHeight = 12;
this.listBox1.Location = new System.Drawing.Point(32, 24);
this.listBox1.Name = "listBox1";
this.listBox1.Size = new System.Drawing.Size(120, 280);
this.listBox1.TabIndex = 0;
this.listBox1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.listBox1_MouseDown);
//
// listBox2
//
this.listBox2.ItemHeight = 12;
this.listBox2.Location = new System.Drawing.Point(248, 24);
this.listBox2.Name = "listBox2";
this.listBox2.Size = new System.Drawing.Size(120, 280);
this.listBox2.TabIndex = 0;
this.listBox2.DragDrop += new System.Windows.Forms.DragEventHandler(this.listBox2_DragDrop);
this.listBox2.DragEnter += new System.Windows.Forms.DragEventHandler(this.listBox2_DragEnter);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(408, 333);
this.Controls.Add(this.listBox1);
this.Controls.Add(this.listBox2);
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void Form1_Load(object sender, System.EventArgs e)
{
this.listBox1.AllowDrop = true;
this.listBox2.AllowDrop = true;
this.listBox1.Items.Add("a");
this.listBox1.Items.Add("b");
this.listBox1.Items.Add("c");