为什么不是';t控件正在移动

本文关键字:控件 移动 为什么不 | 更新日期: 2023-09-27 18:24:03

大约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的处理程序,它们可以代表添加到面板中的所有控件。

我该怎么做?

为什么不是';t控件正在移动

以下是我经常使用的更简洁的代码:

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;
  }
}