【问题标题】:User control not getting painted c#用户控件没有被绘制c#
【发布时间】: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


【解决方案1】:

我通过将表单设计中的 TrasnsparencyKey 从黑色更改为另一种颜色而不是黑色来解决此问题,尝试一种您不使用的颜色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    相关资源
    最近更新 更多