如何在Panel移动窗体窗口中创建mousedrag?

Jas*_*n94 6 c# winforms

我有这个我想要启用的System.Windows.Forms.Panel,这样如果用户点击并拖动鼠标拖动窗口到.

我可以这样做吗?我必须实施多个活动吗?

Bra*_*avo 30

最适合我的解决方案是使用非托管代码,与HatSoft发布的答案不同,它可以为您提供平滑的窗口移动.

3个小步骤在Panel运动上拖动窗口

using System.Runtime.InteropServices;
Run Code Online (Sandbox Code Playgroud)

在你的课程中添加这六行

public const int WM_NCLBUTTONDOWN = 0xA1;
public const int HT_CAPTION = 0x2;

[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
Run Code Online (Sandbox Code Playgroud)

Panel上的MouseMove事件应如下所示

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
   if (e.Button == MouseButtons.Left)
   {
      ReleaseCapture();
      SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
   }
}
Run Code Online (Sandbox Code Playgroud)

发布它有点晚了:),谁知道我们将来可能会再次需要它.

  • 这应该被选为接受的答案。奇迹般有效。当前接受的答案存在故障,但对解决此问题时要采取的方法有所帮助。 (3认同)

Hat*_*oft 5

您可以通过使用面板的 MouseMove 事件来实现它

示例应该是这样的(抱歉还没有测试过)

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        this.Location = new Point(Cursor.Position.X + e.X , Cursor.Position.Y + e.Y);
    }
}
Run Code Online (Sandbox Code Playgroud)