C# 在窗体内移动面板

Posted

技术标签:

【中文标题】C# 在窗体内移动面板【英文标题】:C# Move Panel inside Form 【发布时间】:2017-03-13 19:11:37 【问题描述】:

我想让我的表单中的某些面板可拖动/可移动。我已经集成:

    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();

根据我在这里找到的其他答案。还有:

    void pnlSettings_MouseMove(object sender, MouseEventArgs e)
    
        Drag_Form(Handle, e);
    
    public static void Drag_Form(IntPtr Handle, MouseEventArgs e)
        if (e.Button == MouseButtons.Left)
        
          ReleaseCapture();
          SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
        
    

似乎发生的是整个表单移动,而不仅仅是面板(pnlSettings)。我似乎无法弄清楚如何让面板单独移动。

【问题讨论】:

【参考方案1】:

Handle 是表单的句柄。

您需要传递您要移动的控件的.Handle

【讨论】:

所以如果我想移动 pnlSettings(我的 Panel 的名称),这是否意味着我必须明确告诉 Panel 内的所有控件一起移动?后期编辑:没关系。答案是否定的。你是对的,我只需要发送:Drag_Form(pnlSettings.Handle, e);

以上是关于C# 在窗体内移动面板的主要内容,如果未能解决你的问题,请参考以下文章

C#的两个控件在窗体移动。

WPF无边框窗体怎么移动?C#

C#怎么才能实现拖动控件时窗体也跟着移动

C#关于winforms窗体大小边框移动动画等属性

在 C# 中的面板上拖放时移动控件

C#中form的窗体属性formborderstyle设置为none后就不能移动了