用户控件没有被绘制c#

Posted

技术标签:

【中文标题】用户控件没有被绘制c#【英文标题】:User control not getting painted 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 来进行用户控制移动。 【参考方案1】:

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

【讨论】:

以上是关于用户控件没有被绘制c#的主要内容,如果未能解决你的问题,请参考以下文章

C# wpf 如何实现自定义控件,布局时,大小发生变化,内部绘制的曲线跟随变化?

如何在 C# 中隐藏包含用户控件的表单?

c# 用户自定义控件的问题 winform

C#自定义控件开发—LED指示灯

获取父用户控件WPF C#的名称

在 C# 中的另一个控件值之前添加控件值