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子窗口一个边框,故事结束。