在窗口中拖拽控件,以标签拖拽为例,可以动态给要拖拽的控件绑定MouseUP,MouseDown,MouseMove事件。
private bool isMouseDown = false;
private Point lableLocation; //lable的location
private Point mouseOffset; //鼠标的按下位置
//private int i = 0;
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text != string.Empty)
{
Label lb = new Label();
//i++;
lb.Name = "lb" + getLbID();
Random r = new Random();
lb.Location = new Point(r.Next(100,this.Width-100), r.Next(100,this.Height-100));
lb.Text = textBox1.Text.Trim();
ComboBox cb = (ComboBox)this.Controls["cobColor"];
lb.BackColor = getColorFromCombo(cb.SelectedIndex);
lb.MouseDown+=new MouseEventHandler(lb_MouseDown);
lb.MouseMove+=new MouseEventHandler(lb_MouseMove);
lb.MouseUp+=new MouseEventHandler(lb_MouseUp);
lb.MouseClick+=new MouseEventHandler(lb_MouseClick);
lb.MouseDoubleClick+=new MouseEventHandler(lb_MouseDoubleClick);
lb.Font = new System.Drawing.Font("微软雅黑", 48F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
lb.AutoSize = true;
this.Controls.Add(lb);
}
}
private void lb_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
Label lb = (Label)sender;
lb.Visible = false;
lb.Dispose();
}
}
private void lb_MouseDown(object sender,MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
isMouseDown = true;
lableLocation = ((Label)sender).Location;
mouseOffset = Control.MousePosition;
}
}
private void lb_MouseMove(object sender, MouseEventArgs e)
{
int _x = 0;
int _y = 0;
if (isMouseDown)
{
Point pt = Control.MousePosition;
_x = mouseOffset.X - pt.X;
_y = mouseOffset.Y - pt.Y;
Label lb = (Label)sender;
lb.Location = new Point(lableLocation.X - _x, lableLocation.Y - _y);
}
}
private void lb_MouseUp(object sender, MouseEventArgs e)
{
isMouseDown = false;
}