当前位置: 代码迷 >> .NET Framework >> 再winform中,如何让控件移动时移不出父容器
  详细解决方案

再winform中,如何让控件移动时移不出父容器

热度:318   发布时间:2016-05-02 01:06:04.0
再winform中,怎么让控件移动时移不出父容器。
再winform中,怎么让控件移动时移不出父容器。
如果不用任何容器的控件,那就不能移动出当前的form窗体。
最好给下例子,我现在脑子很乱。
我的代码
C# code
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace tc{    public partial class Form4 : Form    {        //将被拖动的控件         private Control control;         public Form4()        {            InitializeComponent();            //this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form4_Paint);            this.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint);            control = new Button();            control.MouseDown += new MouseEventHandler(button1_MouseDown);            control.MouseMove += new MouseEventHandler(button1_MouseMove);            control.MouseUp += new MouseEventHandler(button1_MouseUp);            this.Controls.Add(control);           }        //鼠标按下坐标(control控件的相对坐标)         Point mouseDownPoint = Point.Empty;        //显示拖动效果的矩形         Rectangle rect = Rectangle.Empty;        //是否正在拖拽         bool isDrag = false;        //重置变量         private void reset()        {            mouseDownPoint = Point.Empty;            rect = Rectangle.Empty;            isDrag = false;        }         //窗体重绘         private void Form4_Paint(object sender, PaintEventArgs e)        {            if (rect != Rectangle.Empty)            {                if (isDrag)                {//画一个和Control一样大小的黑框                     e.Graphics.DrawRectangle(Pens.Black, rect);                }                else                {                    e.Graphics.DrawRectangle(new Pen(this.BackColor), rect);                }            }        }        //把相对与control控件的坐标,转换成相对于窗体的坐标。         private Point getPointToForm(Point p)        {            return this.PointToClient(control.PointToScreen(p));        }         void button1_MouseDown(object sender, MouseEventArgs e)        {            if (e.Button == MouseButtons.Left)            {                mouseDownPoint = e.Location;                //记录控件的大小                 rect = control.Bounds;            }         }         void button1_MouseMove(object sender, MouseEventArgs e)        {            if (e.Button == MouseButtons.Left)            {                    isDrag = true;                    //重新设置rect的位置,跟随鼠标移动                     rect.Location = getPointToForm(new Point(e.Location.X - mouseDownPoint.X, e.Location.Y - mouseDownPoint.Y));                    this.Refresh();                                   // }            }         }         void button1_MouseUp(object sender, MouseEventArgs e)        {            if (e.Button == MouseButtons.Left)            {                if (isDrag)                {                    isDrag = false;                    //移动control到放开鼠标的地方                     control.Location = rect.Location;                    this.Refresh();                }                reset();            }         }        private void panel1_Paint(object sender, PaintEventArgs e)        {            if (rect != Rectangle.Empty)            {                if (isDrag)                {//画一个和Control一样大小的黑框                     e.Graphics.DrawRectangle(Pens.Black, rect);                }                else                {                    e.Graphics.DrawRectangle(new Pen(this.BackColor), rect);                }            }        }     }}


------解决方案--------------------
你的意思是不用mdi窗体是吗?

------解决方案--------------------
LZ。你的意思不是很明确
  相关解决方案