c# - 在控件完成绘制之前显示表单

标签 c# winforms paint

我相当简单的 c# WinForm 窗体上的各种控件(主要是标签和面板)在显示窗体时没有绘制。表格显示后大约半秒,它们就完成了绘制。

有没有简单的解决方法?

更多详情:

绘制最慢的面板显示从 SQL 数据库读取的一些数据。数据被绘制,文本标签和背景不是。该面板包含从数据库中提取的极少量数据。

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

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

最佳答案

这是标准的 Windows User32 呈现行为。窗体和大部分控件都是单独的窗口。他们每个人都收到一条 WM_PAINT 消息,告诉他们需要自己绘制,这些消息以 Z 顺序逐个传递到每个窗口。当控件自身绘制缓慢时,就会变得很明显。该控件未绘制的矩形及其后面的矩形在短时间内可见。

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

关于c# - 在控件完成绘制之前显示表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3379465/

相关文章:

c# - 将自定义 EventArgs 作为事件参数传递

C# 如何将流重定向到控制台 Out?

c# - 最小化表单到通知区域

.net - ListView 空标记文本

vb.net - 绘制图形在 VB.net 中消失

java - 背景颜色不变

c# - Windows服务的简单线程问题

c# - 在 C 结构中设置变量就像在 C# 类构造函数中一样

c# - 将 WinForm ClickNCode 重构为 MVP 被动 View

android - 如何在 ImageView 的同一区域上填充不同的颜色(在 ImageView 的同一区域上填充另一种颜色)?