在做重构U层的过程中有一个很麻烦的过程的就是窗体的拖动,因为设置属性的缘故窗体的FormBorderStyle为None窗体就开始变得死板,就很呆,所有功能都要自己写,就很烦.
实现的功能是按下左键拖动窗体上方的边栏时窗体跟着鼠标移动
其实方法也挺简单在U层工具类的工具类创建共有的方法但是从之前的方法你要知道你用到了什么,需要用什么.
1.需要获取本窗体的X和Y的值
2.判断鼠标按键
3.窗体的坐标跟随鼠标而移动
以下是实现的代码:
窗体的拖动第一版代码
#region 点击鼠标左键实现窗体跟随鼠标拖动
//按下鼠标获取当前的X,Y的值
private void palTop_MouseDown(object sender, MouseEventArgs e)
{
this.mousePoint.X = e.X;
this.mousePoint.Y = e.Y;
}
//跟随左键移动而移动
private void palTOP_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.Top = Control.MousePosition.Y - mousePoint.Y;
this.Left = Control.MousePosition.X - mousePoint.X;
}
}
#endregion
因为用到的窗体较多,所以每个窗体都需要加上一个,就想到可不可以抽出一个方法来复用,减少一下冗余.
于是就将MouseMove的方法抽象一下
1.公用的 用到了public和setic
2.参数 因为是写到类里边的所以用到的是窗体(Form form)和point(表示的整数x坐标和y坐标点定义在二维平面中的有序的对)
窗体的拖动第二版代码:
先创建工具类Utils,然后用到:
public static void move(Form form, MouseEventArgs e, Point p)
{
if (e.Button == MouseButtons.Left)
{
form.Top = Control.MousePosition.Y - p.Y;
form.Left = Control.MousePosition.X - p.X;
}
}
在所需要的窗体中写
//待调整
private void palTop_MouseDown(object sender, MouseEventArgs e)
{
this.mousePoint.X = e.X;
this.mousePoint.Y = e.Y;
}
//调用方法
private void palTop_MouseMove(object sender, MouseEventArgs e)
{
utils.move(this,e, mousePoint);
}
获取当前窗体X,Y值的方法暂时还没有弄出来,后续会更新的.