用C#.NET实现拖放操作

本文介绍如何在Windows应用程序中实现拖放功能。主要通过MouseDown事件启动拖放操作,使用DoDragDrop方法进行数据传递;DragEnter事件判断是否接受拖放并设置拖放效果;DragDrop事件完成数据放置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在应用程序中,是通过处理一系列事件,如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(3224);
   
this.listBox1.Name = "listBox1";
   
this.listBox1.Size = new System.Drawing.Size(120280);
   
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(24824);
   
this.listBox2.Name = "listBox2";
   
this.listBox2.Size = new System.Drawing.Size(120280);
   
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(614);
   
this.ClientSize = new System.Drawing.Size(408333);
   
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"));
  }
 }
}

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值