45fan.com - 路饭网

搜索: 您的位置主页 > 电脑频道 > 电脑教程 > 阅读资讯:怎么样利用C#实现控件托拽调整外观?

怎么样利用C#实现控件托拽调整外观?

2016-09-02 04:44:15 来源:www.45fan.com 【

怎么样利用C#实现控件托拽调整外观?

本文主要讨论一下制作类似vs.net的设计时控件可拖动的方法。具体思路是:制作一个容器控件,从Panel继承,名称为MyPanel;制作一个要拖动的控件,这里举例从Label继承,名称为MyLabel。当运行应用程序时,窗体加载MyPanel,MyPanel加载MyLabel,MyLabel在容器MyPanel中可以任意拖动。

  1. 从Label继承一个类,命名为MyLabel,在初始化函数中加入一些初始信息代码,比如:
    public MyLabel()
    {
    this.Text = "this is my custom label";
    this.Width = 200;
    this.BackColor = System.Drawing.Color.White;
    }
  2. 声明一个Point对象,该对象(作为一个变量)决定在什么情况下移动窗体。
    Point mouseOffset;
  3. 声明获得绝对坐标的API。
    [DllImport("user32.dll")]
    static extern bool ClientToScreen(IntPtr hWnd,ref Point lp);
  4. 重写OnMouseDown方法,加入如下代码:
    //获得鼠标的相对坐标的相反数
    mouseOffset = new Point(-e.X,-e.Y);
  5. 重写OnMouseMove方法,加入如下代码:
    if (e.Button == MouseButtons.Left)
    {
    //获得父容器Location的绝对坐标值
    Point lPoint = this.Parent.Location;
    bool tmp = ClientToScreen(this.Parent.Handle,ref lPoint);

    //获得当前鼠标相对与父容器的坐标
    Point mousePoint = new Point(Control.MousePosition.X-lPoint.X,Control.MousePosition.Y-lPoint.Y);
    //移动控件
    mousePoint.Offset(mouseOffset.X,mouseOffset.Y);
    //设置位置
    this.Location = mousePoint;
    }
  6. 从Panel继承一个类,此类为容器,名称为MyPanel在初始化函数中加入一些初始信息代码,比如:
    public MyPanel()
    {
    this.Width = 400;
    this.Height = 300;
    this.BorderStyle = BorderStyle.Fixed3D;
    this.BackColor = Color.Gray;
    this.Location = new Point(0,0);
    this.SetStyle(ControlStyles.Selectable,true);
    this.SetStyle(ControlStyles.DoubleBuffer,true);
    this.SetStyle(ControlStyles.UserPaint,true);
    this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);
    this.Dock = DockStyle.Fill;
    MyLabel label = new MyLabel();
    label.Location = new Point(100,100);
    this.Controls.Add(label);
    MyLabel label2 = new MyLabel();
    label2.Location = new Point(100,200);
    this.Controls.Add(label2);
    }
  7. 在windows窗体代码的初始化函数的最后加上如下代码,手动添加MyPanel对象:
    MyPanel panel = new MyPanel();
    panel.Location = new Point(0,0);
    this.Controls.Add(panel);

OK,运行一下即可实现对象托拽。

 

本文地址:http://www.45fan.com/dnjc/71006.html
Tags: 实现 控件 托拽
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部