devexpress自定义控件的拖拽和复制

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
// 作者 : V : jbossjf
namespace FireAlarm.Run
{
    public partial class XtraForm1 : DevExpress.XtraEditors.XtraForm
    {
        private int count = 1;
        public XtraForm1()
        {
            InitializeComponent();
            DragDrop += Form1_DragDrop;
            DragEnter += Form1_DragEnter;
        }

        private void XtraForm1_Load(object sender, EventArgs e)
        {
            this.AllowDrop = true;
        }
        private void Form1_DragEnter(System.Object sender, DragEventArgs e)
        {
            //当Button被拖拽到WinForm上时候,鼠标效果出现
           // if ((e.Data.GetDataPresent(typeof(Button))))
            {
                e.Effect = DragDropEffects.Copy;
            }
        }

        private void Form1_DragDrop(System.Object sender, DragEventArgs e)
        {
            //拖放完毕之后,自动生成新控件
            Button btn = new Button();
            btn.Size = simpleButton1.Size;
            btn.Location = this.PointToClient(new Point(e.X, e.Y));
            //用这个方法计算出客户端容器界面的X,Y坐标。否则直接使用X,Y是屏幕坐标
            this.Controls.Add(btn);
            btn.Text = "按钮" + count.ToString();
            count = count + 1;
            btn.BringToFront();//将控件放置所有控件最顶层  
            //btn.SendToBack();//将控件放置所有控件最底层
            btn.MouseDown += new MouseEventHandler(lable_MouseDown);
            btn.MouseUp += new MouseEventHandler(lable_MouseUp);
            btn.MouseMove += new MouseEventHandler(lable_MouseMove);
        }
        //鼠标移动窗体移动
        private bool isMouseDown = false;
        private Point lableLocation;     //lable的location
        private Point mouseOffset;      //鼠标的按下位置
        private void lable_MouseDown(object sender, MouseEventArgs e)
        {

            if (e.Button == MouseButtons.Left)
            {
                isMouseDown = true;
                lableLocation = ((Button)sender).Location;

                
                mouseOffset = Control.DeviceXtraUserControl.MousePosition;
            }

        }

        private void lable_MouseUp(object sender, MouseEventArgs e)
        {
            isMouseDown = false;
        }

        private void lable_MouseMove(object sender, MouseEventArgs e)
        {
            int _x = 0;
            int _y = 0;
            if (isMouseDown)
            {
                Point pt = Control.DeviceXtraUserControl.MousePosition;
                _x = mouseOffset.X - pt.X;
                _y = mouseOffset.Y - pt.Y;
                ((Button)sender).Location = new Point(lableLocation.X - _x, lableLocation.Y - _y);
            }

        }

        private void simpleButton1_MouseDown(object sender, MouseEventArgs e)
        {
            //左键的话,标志位为true(表示拖拽开始)
            if ((e.Button == System.Windows.Forms.MouseButtons.Left))
            {
                simpleButton1.DoDragDrop(simpleButton1, DragDropEffects.Copy | DragDropEffects.Move);
                //形成拖拽效果,移动+拷贝的组合效果
            }
        }

     
     
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值