Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 窗体在控件完成绘制之前显示_C#_Winforms_Paint - Fatal编程技术网

C# 窗体在控件完成绘制之前显示

C# 窗体在控件完成绘制之前显示,c#,winforms,paint,C#,Winforms,Paint,我相当简单的c#WinForm表单上的各种控件(主要是标签和面板)在显示表单时不会被绘制。他们完成了绘画约半秒后的形式显示 有没有简单的解决办法 更多详情: 绘制速度最慢的面板显示从SQL数据库读取的一些数据。数据是由文本绘制的,而标签和背景则不是。该面板保存从数据库中提取的少量数据 另一个在窗体出现后完成绘制的面板只包含几个标签、一个文本控件和一个按钮 此外,此窗体位于另一个窗体的顶部,该窗体的唯一用途是用半透明背景覆盖计算机屏幕。当我从应用程序中删除此背景窗体时,相同的控件仍然无法在显示窗体

我相当简单的c#WinForm表单上的各种控件(主要是标签和面板)在显示表单时不会被绘制。他们完成了绘画约半秒后的形式显示

有没有简单的解决办法

更多详情:

绘制速度最慢的面板显示从SQL数据库读取的一些数据。数据是由文本绘制的,而标签和背景则不是。该面板保存从数据库中提取的少量数据

另一个在窗体出现后完成绘制的面板只包含几个标签、一个文本控件和一个按钮


此外,此窗体位于另一个窗体的顶部,该窗体的唯一用途是用半透明背景覆盖计算机屏幕。当我从应用程序中删除此背景窗体时,相同的控件仍然无法在显示窗体之前完成绘制(但现在它们仅在大约四分之一秒而不是大约半秒完成绘制)。

这是标准的Windows User32渲染行为。窗体和大多数控件都是单独的窗口。他们每个人都会收到一条WM_PAINT消息,告诉他们需要自己绘制,这些消息按Z顺序一个接一个地传递到每个窗口。当控件绘制自身的速度较慢时,这种情况就会变得明显。该控件的未绘制矩形及其后面的矩形在短时间内可见


Windows窗体中可用的标准双缓冲技术无法解决此问题,您必须对整个窗体进行双缓冲。这是可能的,我在中的回答向您展示了如何操作。

听起来表单上有一个或多个控件减慢了绘制速度-麻烦面板上显示了哪些组件?@Will,一个面板有一个包含三个标签、一个文本框和一个按钮的groupBox。另一个面板有一个groupBox,其中包含有六个标签的第二个面板和第三个面板,第三个面板显示从SQL数据库中提取的一些数据(数据只是几行用户帐户名)。SQL数据如何显示在第三个面板上-是否绘制了该面板的所有者,或者它是否包含例如DataGridView?SQL数据被写入TableLayoutPanel控件的几个选项卡中。是的,这似乎已经完成了(我需要对其进行更多的测试以确保)。再次感谢你的大力帮助。