使面板可拖动

时间:2014-02-07 00:56:36

标签: c# panel

我正在创建一个“裁剪工具”,我需要制作一个包含2个可拖动按钮的面板。

到目前为止,我已尝试过这样的事情,但只有当我点击鼠标的右键时才会发生更改位置事件......

this.MouseDown += new MouseEventHandler(onRightClickMouse);
private void onRightClickMouse(object sender, MouseEventArgs e)
{
      if (e.Button == MouseButtons.Right)
      {
            Point localMouseClickPoint = new Point(e.X, e.Y);
            panel1.Location = localMouseClickPoint;
      }
}

我的问题:如何在我的表单中将该面板拖动?(我的意思是单击面板然后将其拖动到某个位置)。

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

delegate void updatePanelCallback();
panel1.MouseDown += new MouseEventHandler(onMouseDown);
panel1.MouseUp += new MouseEventHandler(onMouseUp);
System.Timers.Timer runTimer = new System.Timers.Timer(100);
runTimer.Elapsed += new ElapsedEventHandler(onTimerElapsed);
private void onMouseDown(object sender, MouseEventArgs e)
{
    if (e.Button != MouseButtons.Right)
    {
        return;
    }
    runTimer.Enabled = false;
}
private void onMouseUp(object sender, MouseEventArgs e)
{
    runTimer.Enabled = false;
}
public void updatePanelLocation()
{
    if (this.InvokeRequired)
    {
        this.Invoke(new updatePanelCallback(updatePanelLocation), new object[] {});
    }
    else
    {
        Cursor curs = new Cursor(Cursor.Current.Handle);
        panel1.Location = curs.Position;
    }
}
private void onTimerElapsed(object source, ElapsedEventArgs e)
{
    updatePanelLocation();
}

答案 1 :(得分:0)

您可以分两步尝试,在MouseDown事件上准备操作并在MouseUp上完成。