用C#.NET实现拖放操作

王朝c#·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

在应用程序中,是通过处理一系列事件,如DragEnter,DragLeave和DragDrop事件来实现在Windows应用程序中的拖放操作的。通过使用这些事件参数中的可用信息,可以轻松实现拖放操作。

拖放操作在代码中是通过三步实现的,首先是启动拖放操作,在需要拖动数据的控件上实现MouseDown事件响应代码,并调用DoDragDrop()方法;其次是实现拖放效果,在目标控件上添加DragEnter事件响应代码,使用DragDropEffects枚举类型实现移动或复制等拖动效果;最后是放置数据操作,在目标控件上添加DragDrop响应代码,把数据添加到目标控件中。

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");

}

private void listBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)

{

this.listBox1.DoDragDrop(this.listBox1.Items[this.listBox1.SelectedIndex],DragDropEffects.Move);

}

private void listBox2_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)

{

if(e.Data.GetDataPresent("Text"))

{

e.Effect = DragDropEffects.Move;

}

}

private void listBox2_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)

{

this.listBox2.Items.Add(e.Data.GetData("Text"));

this.listBox1.Items.Remove(e.Data.GetData("Text"));

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有  導航