【问题标题】:Why isn't the control moving?为什么控制不动?
【发布时间】:2013-07-19 04:30:23
【问题描述】:

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

我该怎么做?

【问题讨论】:

  • 你用的是windows控件吗?或者您正在使用 DevExpress 之类的任何外部库?\
  • @jparthj 只是 Windows 控件。
  • “一组处理程序”是什么意思?所有控件都使用相同的事件方法,所以这应该不是问题
  • 刚刚测试了你的代码,效果很好

标签: c# .net winforms drag-and-drop controls


【解决方案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;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 2018-11-21
    相关资源
    最近更新 更多