加载控件后如何显示主窗体

时间:2010-12-04 16:24:16

标签: c# winforms splash-screen

我正在创建一个简单的程序,它有一个启动画面,显示3秒钟,在启动画面后,我的主表单加载。然而,当我的主表单加载时,它将在加载我的所有控件的过程中(我的页面上有36个按钮...将它们用于轮盘赌桌)。因此,在我的主要表单的前1-2秒显示,它正在加载所有这些按钮,看起来有点难看。如何在启动画面或其他任何方式的3秒钟内加载此表单?感谢


for (i = 0; i < 36; i++) 
{ int j, k; j = i % 3; k = i / 3; 
  button[i] = new Label(); 
  button[i].Location = new Point(80 + (41*j), 64 + (20*k)); 
  button[i].Cursor = Cursors.Hand; 
  etc etc. 
}

1 个答案:

答案 0 :(得分:3)

它没有加载它们,你看到只需要绘制按钮所需的时间。您可以轻松地仔细检查:最小化表单并恢复它。这需要2秒钟,而不是高端,也许它只是感觉那样,或者你的硬件功能非常不足。有36个按钮确实让你能够观察到绘画,特别是当他们有一个图像时。确保放在按钮上的图像尺寸合适,不得不重新调整它们以适应按钮的价格昂贵并且会占用绘画时间。

除非您在启用了Aero的Vista或Win7上运行此屏幕,否则启动屏幕无法解决此问题。您可以使用Opacity属性稍微隐藏它,使用计时器从0增加到0.99。一个真正的解决方法是不使用按钮,而只是在窗体的OnPaint()方法覆盖中绘制轮盘赌桌。但是,您必须添加代码才能进行鼠标命中测试。

Q&amp; D修复是对整个表单进行双重缓冲,渲染为离屏位图,然后将结果显示在屏幕上。这并没有加速这幅画,它只是不再引人注目。将此代码粘贴到表单类中,以便在Windows XP及更高版本中使用内置支持:

protected override CreateParams CreateParams {
  get {
    CreateParams cp = base.CreateParams;
    cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
    return cp;
  }
}