C#仅当最大化时才完全隐藏窗体边框

C#仅当最大化时才完全隐藏窗体边框,c#,.net,mdi,formborderstyle,C#,.net,Mdi,Formborderstyle,我有一个窗体,它是MDI窗体的子窗体。当此表单未最大化时,它将位于MDI表单内部的几个菜单面板和控件下面。它有边框、图标和控制框。当窗体最大化时,边框将显示在主MDI窗体边框的正下方。当它最大化时,controlbox被禁用,我们不需要任何理由的边框——它只是看起来很邋遢。表单以编程方式调整大小,因此在最大化表单时,不需要边界/控件 只有当窗体最大化时,才有办法将FormBorderStyle设置为None,当窗体的大小不是Max时,才有办法将FormBorderStyle设置为sizeable

我有一个窗体,它是MDI窗体的子窗体。当此表单未最大化时,它将位于MDI表单内部的几个菜单面板和控件下面。它有边框、图标和控制框。当窗体最大化时,边框将显示在主MDI窗体边框的正下方。当它最大化时,controlbox被禁用,我们不需要任何理由的边框——它只是看起来很邋遢。表单以编程方式调整大小,因此在最大化表单时,不需要边界/控件

只有当窗体最大化时,才有办法将FormBorderStyle设置为None,当窗体的大小不是Max时,才有办法将FormBorderStyle设置为sizeable


请参见下面的屏幕截图,红线位于我想要隐藏的边框上-标记为toolstrip控件的区域位于窗体上方,而不是窗体上。标有空白的图片框是具有边框的实际形状。未最大化时,边框将直接显示在图片框区域的上方和toolstrip区域的下方,并可由用户调整大小。最大化后,用户无法调整其大小,因此我想隐藏该边框,因为它在主窗体边框下方看起来很松散

未最大化时:[1]:


最大化时:

它是子窗体,因此不能最大化父窗体。你能分享更多细节来进一步帮助你吗?也许可以分享一个截图?

我根据在stackoverflow和Google中找到的其他帖子编写了这段代码

我已经测试过了,它很有效

[DllImport("user32.dll")]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);

[DllImport("user32.dll")]
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);

[DllImport("user32.dll", ExactSpelling = true)]
private static extern int SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

const int GWL_EXSTYLE = -20;
const int WS_EX_CLIENTEDGE = 0x200;
const uint SWP_NOSIZE = 0x0001;
const uint SWP_NOMOVE = 0x0002;
const uint SWP_NOZORDER = 0x0004;
const uint SWP_NOACTIVATE = 0x0010;
const uint SWP_FRAMECHANGED = 0x0020;
const uint SWP_NOOWNERZORDER = 0x0200;

private void MdiEdgeBorderOnOff(bool off)
{
    foreach(Control ctl in this.Controls)
    {
        if (ctl.GetType() != typeof(MdiClient)) continue;

        int wnd = GetWindowLong(ctl.Handle, GWL_EXSTYLE);
        if (off)
            wnd &= ~WS_EX_CLIENTEDGE;
        else
            wnd |= WS_EX_CLIENTEDGE;

        SetWindowLong(ctl.Handle, GWL_EXSTYLE, wnd);

        SetWindowPos(ctl.Handle, IntPtr.Zero, 0, 0, 0, 0,
            SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER |
            SWP_NOOWNERZORDER | SWP_FRAMECHANGED);
    }
}

子窗体在最大化时没有边框,它填充所有客户端区域,通常与父窗体共享其菜单。你能分享你的表单最大化的图片吗?你是说凸起的边框吗?是的,我还添加了一个屏幕截图,显示了当没有最大化时它是如何显示的。红线在我想要隐藏的边框上-标记为toolstrip控件的区域在表单上方,而不是实际上在表单上。标有空白的图片框是具有边框的实际形状。未最大化时,边框将直接显示在图片框区域的上方和toolstrip区域的下方,并可由用户调整大小。最大化后,用户无法调整其大小,因此我希望隐藏该边框,因为它在主窗体边框下方看起来很松散。红线位于我希望隐藏的边框上-标记为toolstrip控件的区域位于窗体上方,而不是实际上位于窗体上。标有空白的图片框是具有边框的实际形状。未最大化时,边框将直接显示在图片框区域的上方和toolstrip区域的下方,并可由用户调整大小。最大化后,用户无法调整其大小,因此我想隐藏该边框,因为它在主窗体边框下方看起来很松散。