大约5年前,我创建了一个应用程序,允许我在Panel控件内拖动控件。
我知道如何搬家。
问题是我丢失了备份代码,无法记住/弄清楚我之前是如何做到的。
当我单击按钮(例如,添加按钮)时,动态创建控件。
这样:
bool mouseDown;
Point lastMouseLocation = new Point();
Control SelectedControl = null;
void AddButton_Click(object sender, EventArgs e)
{
// Create the control.
Button button = new Button();
button.Location = new Point(0,0);
button.Text = "hi lol";
// the magic...
button.MouseDown += button_MouseDown;
button.MouseMove += button_MouseMove;
button.MouseUp += button_MouseUp;
button.Click += button_Click;
}
void button_Click(object sender, EventArgs e)
{
SelectedControl = sender as Control; // This "selects" the control.
}
void button_MouseDown(object sender, EventArgs e)
{
mouseDown = true;
}
void button_MouseMove(object sender, EventArgs e)
{
if(mouseDown)
{
SelectedControl.Location = new Point(
(SelectedControl.Location.X + e.X) - lastMouseLocation.X,
(SelectedControl.Location.Y + e.Y) - lastMouseLocation.Y
);
}
}
void button_MouseUp(object sender, EventArgs e)
{
mouseDown = false;
}
所以基本上我要做的是当用户点击表单上的任何控件时,然后“选择它”,然后他们就可以移动它。
但问题是,我不记得怎么做了,所以我只能为MouseDown,Up,Move等和SelectedControl提供一组处理程序,它们可以代表添加到Panel的所有控件。
我该怎么做?
答案 0 :(得分:1)
以下是我经常使用的更简洁的代码:
Point downPoint;
void button_MouseDown(object sender, MouseEventArgs e)
{
downPoint = e.Location;
}
void button_MouseMove(object sender, MouseEventArgs e)
{
if(MouseButtons == MouseButtons.Left){
Button button = sender as Button;
button.Left += e.X - downPoint.X;
button.Top += e.Y - downPoint.Y;
}
}