【C#实现拖拽添加按钮到指定面板,并实现按钮在面板中拖动】

C#实现拖拽添加按钮到指定面板,并实现按钮在面板中拖动
1、添加TreeView控件,添加节点,设置AllowDrop属性为true。

效果图

在这里插入图片描述

代码

 public partial class MainForm : Form
 {
     /// <summary>
     /// 鼠标点
     /// </summary>
     Point mousePoint;
     /// <summary>
     /// 按钮点
     /// </summary>
     Point btnPoint;
     public MainForm()
     {
         InitializeComponent();
     }
     /// <summary>
     /// 树状图控件:拖拽节点时触发
     /// </summary>
     private void treeView_ToolTree_ItemDrag(object sender, ItemDragEventArgs e)
     {
         IDataObject data = new DataObject();
         data.SetData("tool", e.Item);
         this.DoDragDrop(data, DragDropEffects.Copy);
     }
     /// <summary>
     /// 拖进面板时触发
     /// </summary>
     private void panel_FlowPanel_DragEnter(object sender, DragEventArgs e)
     {
         if (e.Data.GetDataPresent("tool"))
         {
             e.Effect = DragDropEffects.Copy;
         }
         else
         {
             e.Effect = DragDropEffects.None;
         }
     }
     /// <summary>
     /// 拖放操作完成时触发
     /// </summary>
     private void panel_FlowPanel_DragDrop(object sender, DragEventArgs e)
     {
         object item = e.Data.GetData("tool");
         if (item != null)
         {
             TreeNode node = item as TreeNode;
             Button button = new Button();
             button.Name = node.Text;
             button.Text = button.Name;
             button.MouseMove += Button_MouseMove;
             button.MouseDown += Button_MouseDown;
             button.Location = panel_FlowPanel.PointToClient(Control.MousePosition);
             panel_FlowPanel.Controls.Add(button);
         }
     }
     /// <summary>
     /// 鼠标左键按下,记录点位
     /// </summary>
     private void Button_MouseDown(object sender, MouseEventArgs e)
     {
         if (e.Button == MouseButtons.Left)
         {
             Button btn = sender as Button;
             btnPoint = btn.Location;
             mousePoint = MousePosition;
         }
     }
     /// <summary>
     /// 鼠标左键按下按钮移动:更新位置,大小
     /// </summary>
     private void Button_MouseMove(object sender, MouseEventArgs e)
     {
         Button btn = sender as Button;
         if (e.Button == MouseButtons.Left)
         {
             //当前按钮位置 = X =  当前鼠标点.X - 按下时的鼠标点.X + 按钮点.X
             //当前按钮位置 = Y =  当前鼠标点.Y - 按下时的鼠标点.Y + 按钮点.Y
             btn.Location = new Point(MousePosition.X - mousePoint.X + btnPoint.X,                            MousePosition.Y - mousePoint.Y + btnPoint.Y);
             panel_FlowPanel.Refresh();
         }
     }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值