1

我在父窗体中打开子窗体,并且我设置formborder style为无,但是在打开子窗体时,我I can see its border for fraction of second该如何避免这种情况,我尝试了下面的代码,但它并没有使这种效果消失,我该如何避免这种效果和顺利加载表格,我尝试分配form opacity = 0和设置应用fade-in效果的计时器,但这也没有解决我的问题,请以正确的方式指导我

我试图避免这个问题的代码

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;
            }
        }
4

1 回答 1

2

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;
        }
    }
于 2013-11-11T14:47:36.550 回答