分類:c#技術文章
在.net中實現拖拽控件主要用到以下函數:
MouseDown(object sender, MouseEventArgs e)
MouseUp(object sender, MouseEventArgs e)
MouseMove(object sender, MouseEventArgs e)
這三個函數的作用分別是鼠標按下時激活,鼠標松開激活和鼠標移動
需要考慮的情況如下
1. 只有在鼠標按下的時候才可以使用鼠標移動事件
2. 鼠標移動的時候控件重新調整位置
為了有效控制第壹個條件,所以可以將鼠標移動事件的綁定推遲到鼠標按下事件中,而不是在初始化時完成,另外要記錄下初始狀態下鼠標位於控件中的坐標,這裏註意MouseEventArgs參數中的X,Y表示的是鼠標在當前控件中的layout坐標,而不是鼠標在主窗口中的坐標。
rivate void button1_MouseDown(object sender, MouseEventArgs e)
{
this.tmpx = e.X;
this.tmpy = e.Y;
this.button1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.button1_MouseMove);
}
同時在鼠標送開事件中再將該方法綁定脫離
private void button1_MouseUp(object sender, MouseEventArgs e)
{
this.button1.MouseMove -= new System.Windows.Forms.MouseEventHandler(this.button1_MouseMove);
}
最後是MouseMove事件
private void button1_MouseMove(object sender, MouseEventArgs e)
{
this.button1.Location = new System.Drawing.Point(this.button1.Location.X + e.X - this.tmpx, this.button1.Location.Y + e.Y - this.tmpy);
}
這裏重新計算了控件的新位置。