在显示表单时,不会在我相当简单的c#WinForm表单上绘制各种控件(主要是标签和面板)。在表格显示后,他们完成了大约半秒的涂漆。
对此有一个简单的解决方法吗?
更多详情:
绘制最慢的面板显示从SQL数据库读取的一些数据。数据是由文本标签和背景绘制的。该面板包含从数据库中提取的非常少量的数据。
在表单出现后完成绘画的另一个面板只包含一些标签,一个文本控件和一个按钮。
此外,此表单位于另一个表单的顶部,其唯一目的是用半透明背景覆盖计算机屏幕。当我从应用程序中删除此背景表单时,相同的控件仍然无法在显示表单之前完成绘制(但现在它们仅被绘制了大约四分之一秒而不是大约半秒)。
答案 0 :(得分:2)
这是标准的Windows User32呈现行为。表单和大多数控件都是单独的窗口。他们每个人都得到一条WM_PAINT消息,告诉他们需要自己绘画,这些消息按Z顺序一个接一个地传递到每个窗口。当控件慢慢自我绘制时,这会变得明显。该控件的未上漆矩形及其后面的矩形在短时间内可见。
Windows窗体中提供的标准双缓冲技术无法解决此问题,您必须对整个表单进行双缓冲。这是可能的,我在this thread中的答案向您展示了如何。