第一种方法(摘自博客园博主:宁静.致远;链接地址:http://www.cnblogs.com/zhangzhu/archive/2012/12/28/2837020.html);
1 /* 首先将窗体的边框样式修改为None,让窗体没有标题栏
2 * 实现这个效果使用了三个事件:鼠标按下、鼠标弹起、鼠标移动
3 * 鼠标按下时更改变量isMouseDown标记窗体可以随鼠标的移动而移动
4 * 鼠标移动时根据鼠标的移动量更改窗体的location属性,实现窗体移动
5 * 鼠标弹起时更改变量isMouseDown标记窗体不可以随鼠标的移动而移动
6 */
7 private bool isMouseDown = false;
8 private Point FormLocation; //form的location
9 private Point mouseOffset; //鼠标的按下位置
10 private void Form1_MouseDown(object sender, MouseEventArgs e)
11 {
12 if (e.Button == MouseButtons.Left)
13 {
14 isMouseDown = true;
15 FormLocation = this.Location;
16 mouseOffset = Control.MousePosition;
17 }
18 }
19
20 private void Form1_MouseUp(object sender, MouseEventArgs e)
21 {
22 isMouseDown = false;
23 }
24
25 private void Form1_MouseMove(object sender, MouseEventArgs e)
26 {
27 int _x = 0;
28 int _y = 0;
29 if (isMouseDown)
30 {
31 Point pt = Control.MousePosition;
32 _x = mouseOffset.X - pt.X;
33 _y = mouseOffset.Y - pt.Y;
34
35 this.Location = new Point(FormLocation.X - _x, FormLocation.Y - _y);
36 }
37
38 }
第二种方法(此种方法已试用,可以实现想要的效果,链接地址:http://bbs.csdn.net/topics/320157403;是用户ID为libinguest的网友提供的方法。
但是在复制代码的时候一定要注意Form1_MouseDown事件的第二个参数,如果是直接在属性事件里面创建的,第二个参数与本段代码里的略有不同,只需要把本段代码里的参数复制过去就可以使用了;复制完之后记得对控件进行事件设置哈):
调用API
using System.Runtime.InteropServices;
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0xF010;
public const int HTCAPTION = 0x0002;
在空间的_MouseDown中加入如下代码:
如:
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
}
第三种(方法来源同上链接地址):
Point mouseOff;//鼠标移动位置变量
bool leftFlag;//标签是否为左键
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseOff = new Point(-e.X, -e.Y); //得到变量的值
leftFlag = true; //点击左键按下时标注为true;
}
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (leftFlag)
{
Point mouseSet = Control.MousePosition;
mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置
Location = mouseSet;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
if (leftFlag)
{
leftFlag = false;//释放鼠标后标注为false;
}
}
1 /* 首先将窗体的边框样式修改为None,让窗体没有标题栏
2 * 实现这个效果使用了三个事件:鼠标按下、鼠标弹起、鼠标移动
3 * 鼠标按下时更改变量isMouseDown标记窗体可以随鼠标的移动而移动
4 * 鼠标移动时根据鼠标的移动量更改窗体的location属性,实现窗体移动
5 * 鼠标弹起时更改变量isMouseDown标记窗体不可以随鼠标的移动而移动
6 */
7 private bool isMouseDown = false;
8 private Point FormLocation; //form的location
9 private Point mouseOffset; //鼠标的按下位置
10 private void Form1_MouseDown(object sender, MouseEventArgs e)
11 {
12 if (e.Button == MouseButtons.Left)
13 {
14 isMouseDown = true;
15 FormLocation = this.Location;
16 mouseOffset = Control.MousePosition;
17 }
18 }
19
20 private void Form1_MouseUp(object sender, MouseEventArgs e)
21 {
22 isMouseDown = false;
23 }
24
25 private void Form1_MouseMove(object sender, MouseEventArgs e)
26 {
27 int _x = 0;
28 int _y = 0;
29 if (isMouseDown)
30 {
31 Point pt = Control.MousePosition;
32 _x = mouseOffset.X - pt.X;
33 _y = mouseOffset.Y - pt.Y;
34
35 this.Location = new Point(FormLocation.X - _x, FormLocation.Y - _y);
36 }
37
38 }
第二种方法(此种方法已试用,可以实现想要的效果,链接地址:http://bbs.csdn.net/topics/320157403;是用户ID为libinguest的网友提供的方法。
但是在复制代码的时候一定要注意Form1_MouseDown事件的第二个参数,如果是直接在属性事件里面创建的,第二个参数与本段代码里的略有不同,只需要把本段代码里的参数复制过去就可以使用了;复制完之后记得对控件进行事件设置哈):
调用API
using System.Runtime.InteropServices;
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0xF010;
public const int HTCAPTION = 0x0002;
在空间的_MouseDown中加入如下代码:
如:
private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
}
第三种(方法来源同上链接地址):
Point mouseOff;//鼠标移动位置变量
bool leftFlag;//标签是否为左键
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
mouseOff = new Point(-e.X, -e.Y); //得到变量的值
leftFlag = true; //点击左键按下时标注为true;
}
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (leftFlag)
{
Point mouseSet = Control.MousePosition;
mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置
Location = mouseSet;
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
if (leftFlag)
{
leftFlag = false;//释放鼠标后标注为false;
}
}