• 【转载】窗体之间的控件拖动 Virus


    原作者: LeoMaya

    用DoDragDrop可以做到的

    首先, 封装一个DragDropObject的Class
    C# code

    public class MovingObject
    {
    protected Control control;

    public MovingObject(Control ctrl)
    {
    control
    = ctrl;
    }

    public Control MovingControl
    {
    get { return control; }
    }
    }



    再封装一个Helper类
    C# code

    public class User32
    {
    [DllImport(
    "User32.dll")]
    public static extern int GetWindowRect(IntPtr handle, ref Rectangle rect);
    }



    OK, 现在随便写一个Form2作为Test用的一个子窗体, 上面只摆一个ListBox控件
    C# code

    public partial class Form2 : Form
    {
    public Form2()
    {
    InitializeComponent();
    AllowDrop
    = true;

    listBox1.MouseDown
    += new MouseEventHandler(listBox1_MouseDown);
    DragEnter
    += new DragEventHandler(Form2_DragEnter);
    DragDrop
    += new DragEventHandler(Form2_DragDrop);
    }

    void Form2_DragDrop(object sender, DragEventArgs e)
    {
    if (e.Data.GetDataPresent(typeof(MovingObject)))
    {
    MovingObject movingObj
    = e.Data.GetData(typeof(MovingObject)) as MovingObject;
    if (movingObj != null)
    {
    Rectangle rect
    = Rectangle.Empty;
    User32.GetWindowRect(Handle,
    ref rect);
    movingObj.MovingControl.Location
    = new Point(e.X - rect.Location.X - 6, e.Y - rect.Location.Y - 34);
    Controls.Add(movingObj.MovingControl);
    }
    }
    }

    void Form2_DragEnter(object sender, DragEventArgs e)
    {
    if (e.Data.GetDataPresent(typeof(MovingObject)))
    e.Effect
    = DragDropEffects.Copy;
    }

    void listBox1_MouseDown(object sender, MouseEventArgs e)
    {
    DoDragDrop(
    new MovingObject(listBox1), DragDropEffects.Copy);
    }
    }



    同样, 写一个Form3的子窗体, 上面只有一个Button控件
    C# code

    public partial class Form3 : Form
    {
    public Form3()
    {
    InitializeComponent();
    AllowDrop
    = true;

    button1.MouseDown
    += new MouseEventHandler(button1_MouseDown);
    DragEnter
    += new DragEventHandler(Form3_DragEnter);
    DragDrop
    += new DragEventHandler(Form3_DragDrop);
    }

    void Form3_DragDrop(object sender, DragEventArgs e)
    {
    if (e.Data.GetDataPresent(typeof(MovingObject)))
    {
    MovingObject movingObj
    = e.Data.GetData(typeof(MovingObject)) as MovingObject;
    if (movingObj != null)
    {
    Rectangle rect
    = Rectangle.Empty;
    User32.GetWindowRect(Handle,
    ref rect);
    movingObj.MovingControl.Location
    = new Point(e.X - rect.Location.X - 6, e.Y - rect.Location.Y - 34);
    Controls.Add(movingObj.MovingControl);
    }
    }
    }

    void Form3_DragEnter(object sender, DragEventArgs e)
    {
    if (e.Data.GetDataPresent(typeof(MovingObject)))
    e.Effect
    = DragDropEffects.Copy;
    }

    void button1_MouseDown(object sender, MouseEventArgs e)
    {
    DoDragDrop(
    new MovingObject(button1), DragDropEffects.Copy);
    }
    }



    好, 现在再弄个MainForm出来, 就叫做Form1吧, 记得要把Form1的IsMdiContainer设为True哦~
    C# code

    public partial class Form1 : Form
    {
    private Form2 f2;
    private Form3 f3;

    public Form1()
    {
    InitializeComponent();

    f2
    = new Form2();
    f3
    = new Form3();

    f2.MdiParent
    = this;
    f3.MdiParent
    = this;

    f2.Show();
    f3.Show();
    }
    }




    怎么样? 发现button1和listBox1可以在两个窗体间自由的拖动没?

    【Blog】http://virusswb.cnblogs.com/

    【MSN】jorden008@hotmail.com

    【说明】转载请标明出处,谢谢

    反馈文章质量,你可以通过快速通道评论:

  • 相关阅读:
    CI登录验证
    兼容所有浏览器的JS动态显示当前日期时间
    Active Record 数据库模式-增删改查操作
    数据库链接的增操作举例
    CI框架获取post和get参数 CodeIgniter
    PHP日期操作类代码-农历-阳历转换、闰年、计算天数等
    根据两点间的经纬度计算距离
    Session 类
    mysql 查询优化规则
    php获取文件夹下面的文件列表和文件夹列表
  • 原文地址:https://www.cnblogs.com/virusswb/p/1184931.html
Copyright © 2020-2023  润新知