C# 如何避免这种影响=>;Formborder为“无”,但在加载时仍然可见

C# 如何避免这种影响=>;Formborder为“无”,但在加载时仍然可见,c#,winforms,C#,Winforms,我正在父窗体中打开子窗体,我已将窗体边框样式设置为“无”,但在为打开子窗体时,我可以在几秒钟内看到它的边框,我如何避免这种情况,我在代码下尝试过,但没有使这种效果消失,我如何避免这种效果并顺利加载窗体,我试图分配form opacity=0并设置应用淡入效果的计时器,但这也不能解决我的问题,请以正确的方式指导我 代码我试图避免这个问题 int originalExStyle = -1; bool enableFormLevelDoubleBuffering = true;

我正在父窗体中打开子窗体,我已将
窗体边框样式设置为“无”,但在为
打开子窗体时,我可以在几秒钟内看到它的边框,我如何避免这种情况,我在代码下尝试过,但没有使这种效果消失,我如何避免这种效果并顺利加载窗体,我试图分配
form opacity=0
并设置应用
淡入效果的计时器,但这也不能解决我的问题,请以正确的方式指导我

代码我试图避免这个问题

int originalExStyle = -1;
        bool enableFormLevelDoubleBuffering = true;

        protected override CreateParams CreateParams
        {
            get
            {
                if (originalExStyle == -1)
                    originalExStyle = base.CreateParams.ExStyle;

                CreateParams cp = base.CreateParams;
                if (enableFormLevelDoubleBuffering)
                    cp.ExStyle |= 0x02000000;   // WS_EX_COMPOSITED
                else
                    cp.ExStyle = originalExStyle;

                return cp;
            }
        }

LarsTech的评论可能是核心问题,MDI子表单必须有一个相当大的边界。这是Winforms忘记执行的一个要求,运行时的错误是多种多样的,并且没有解决办法。另外,解释为什么不透明度不起作用,它只能在顶级窗口上起作用

originalExStyle的使用也从根本上是错误的,
base.CreateParams
不总是返回相同的值。当程序指定表单的某些属性(这些属性会间接影响ExStyle值)时,它会发生更改。包括Form.MdiParent,它设置WS_EX_MDICHILD样式标志。您需要将其删除并仅使用
cp
。你发现的另一个问题像黑客一样嘎嘎作响,它不能正常工作。将其更改为:

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            if (enableFormLevelDoubleBuffering)
                cp.ExStyle |= 0x02000000;   // WS_EX_COMPOSITED
            return cp;
        }
    }

如果这些是MDI子窗体,则不允许更改边框样式。如果这些不是MDI子窗体,则边框不应显示,如果将其设置为border=none;也许您在表单加载中有耗时的代码?@LarsTech是的表单是“MDI子表单”,但我不需要边框,这就是为什么我将其设置为“无”,然后不使用MDI。使您的子窗体TopLevel=false,并将它们添加到面板的控件集合中。@LarsTech如果我执行上述操作,该效果会得到解决吗?那么边界呢,我是否应该只保留
none
<代码>将它们添加到面板的控制集合中
意味着?我没有这一行
您需要删除它并只使用cp
,您可以在代码中显示它吗?您必须给MDI子窗口一个边框,故事结束。