可以通过控件的MouseMove,MouseDown和MouseUp事件来实现控件的移动。
如移动Button1按钮, 通过在button1的MouseMove事件句柄button1_MouseMove中,改变button1的位置即可,也就是重新设置this.button1.Location属性的值。
下面提供一段示例程序,演示移动Button按钮,private Point mousePos; // 记录鼠标位置
private bool beginmove = false; // 记录是否可以移动
……
private void button1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(beginmove)
{
int diffx,diffy;
diffx = mousePos.X - e.X;
diffy = mousePos.Y - e.Y;
this.button1.Location = new Point(button1.Location.X-diffx,button1.Location.Y-diffy);
}
}
private void button1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
beginmove = true;//开始移动
mousePos = new Point(e.X, e.Y);
}
private void button1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
beginmove = false;//停止移动
}
如移动Button1按钮, 通过在button1的MouseMove事件句柄button1_MouseMove中,改变button1的位置即可,也就是重新设置this.button1.Location属性的值。
下面提供一段示例程序,演示移动Button按钮,private Point mousePos; // 记录鼠标位置
private bool beginmove = false; // 记录是否可以移动
……
private void button1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if(beginmove)
{
int diffx,diffy;
diffx = mousePos.X - e.X;
diffy = mousePos.Y - e.Y;
this.button1.Location = new Point(button1.Location.X-diffx,button1.Location.Y-diffy);
}
}
private void button1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
beginmove = true;//开始移动
mousePos = new Point(e.X, e.Y);
}
private void button1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
beginmove = false;//停止移动
}
namespace abc
{
public abc:Form
{
private Button bn; public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HTCAPTION = 0x2;
[DllImportAttribute ("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute ("user32.dll")]
public static extern bool ReleaseCapture();
...
\\为按钮bn添加鼠标事件
private void bn_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.bn.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
}
}
}