【发布时间】:2018-10-19 04:37:02
【问题描述】:
我有一个应用程序,我可以在其中从 1 个用户控件移动到多个用户控件。当我转向许多控件时,我遇到了闪烁的问题。 为了解决闪烁问题,我通过 -
启用了 双缓冲protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
确实解决了闪烁的问题。但是引入了一个新问题,有时我的用户控件没有完全绘制。出现一个黑色窗口。为了解决这个问题,我需要最小化和最大化软件,它才能正常显示。
我认为,虽然双缓冲正在绘制所有用户 一次控制,一个或多个用户控件仍在生成其 控制。而在大师绘画的时候,这种控制并不是 准备好了。
这是获得正确想法的图像-
如图所示,在此特定场景中,有一个表单包含 4 个用户控件。每个用户控件进一步包含其他控件/用户控件。
这个问题可能出了什么问题?
【问题讨论】:
-
你试过在
ResizeEnd事件中调用Invalidate()吗? -
@Sandeep 不,没有帮助。
-
遇到了类似的问题,但用户控件不太复杂。通过在
ResizeEvent中调用Invalidate()来处理主窗口移动,此问题已得到解决。并通过在MouseUp事件中调用Invalidate来进行用户控制移动。
标签: c# winforms double-buffering