因此,我在Google上进行了一些搜索,以找到一些用鼠标拖动按钮的代码。我发现了很多,即使这些都不对我有用。

所以我问你! :-)

我正在尝试以我的形式工作的代码:

bool isDragged = false;
  Point ptOffset;
  private void button1_MouseDown( object sender, MouseEventArgs e )
  {
     if ( e.Button == MouseButtons.Left )
     {
        isDragged = true;
        Point ptStartPosition = button1.PointToScreen(new Point(e.X, e.Y));

        ptOffset = new Point();
        ptOffset.X = button1.Location.X - ptStartPosition.X;
        ptOffset.Y = button1.Location.Y - ptStartPosition.Y;
     }
     else
     {
        isDragged = false;
     }
  }

  private void button1_MouseMove( object sender, MouseEventArgs e )
  {
     if ( isDragged )
     {
        Point newPoint = button1.PointToScreen(new Point(e.X, e.Y));
        newPoint.Offset(ptOffset);
        button1.Location = newPoint;
     }
  }

  private void button1_MouseUp( object sender, MouseEventArgs e )
  {
     isDragged = false;
  }

我当然将Picturebox1更改为按钮1。

但是我只是无法工作。

有人知道为什么吗?

哦,我想在所有按钮上使用它,那么我应该用什么替换Button1才能使其在所有按钮上工作?

-btw,我使用Visual Studio Express。

先感谢您!

有帮助吗?

解决方案

即使我实际上只是复制粘贴,而对于Windows表单

您发布的代码实际上不会单独做任何事情!

要工作,必须将控制的Mousedown()和Mousemove()事件连接到这些方法:

  1. 选择表单上的控件(Picturebox1)。
  2. 在“属性窗格”(默认情况下为右下),单击“闪电”图标以获取该控件的事件列表。
  3. 找出 MouseDown 输入并将其右边的下拉列表更改为 pictureBox1_MouseDown.
  4. 找出 MouseMove 输入并将其右边的下拉列表更改为 pictureBox1_MouseMove.

现在运行它并拖动Picturebox1。

编辑:这是使代码适用于多个控件的方法,如下我的评论中所述。

    bool isDragged = false;
    Point ptOffset;

    private void button1_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            isDragged = true;
            Button btn = (Button)sender;
            ptOffset = new Point(btn.Location.X - Cursor.Position.X, btn.Location.Y - Cursor.Position.Y);
        }
        else
        {
            isDragged = false;
        }
    }

    private void button1_MouseMove(object sender, MouseEventArgs e)
    {
        if (isDragged)
        {
            Point newPoint = Cursor.Position;
            newPoint.Offset(ptOffset);
            Button btn = (Button)sender;
            btn.Location = newPoint;
        }
    }

    private void button1_MouseUp(object sender, MouseEventArgs e)
    {
        isDragged = false;
    }

其他提示

好的,好消息:希望完成后,我们将获得CSI桌面布局。

不是一个好消息:我认为您想做错的事情。

我假设您正在使用Winforms,但是WPF的想法应该相同。运行程序时,设置了布局(例如,要么动态地,例如在调整窗口大小或静态时,例如使用绝对x,y位置设置它时会更改)。

您想做的是:我想获得创建所有锅炉板代码的好处,但是然后,我想在运行时动态更改它...

我认为您需要重新考虑您的方法,然后一次迈出一步(毕竟,Microsoft花了几年的时间才能将GUI拿到目前的位置... Gui出了)。

采取婴儿步骤,但请记住大局:

  • 从定义画布开始。
  • 然后,您可以在其上放一个按钮。
  • 然后愚弄在画布上移动该按钮。 (您在问题中的代码应该适用于画布上的对象)。

从那里开始,继续采取步骤,使您更接近目的地...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top