有没有办法在显示之前加载所有UI控件? C#winform

时间:2010-02-03 05:43:24

标签: c# winforms load splash-screen

我有一个复杂的胜利形式,有很多控件和笨重的重绘,控制调整大小和根据用户屏幕定位,这导致表格在进行一些渲染和重新绘制时显示。

有没有办法加载UI并在显示之前做好准备??我的意思是在整个重绘事件完成后显示最终用户界面。

如果使用启动画面,在加载主窗体之前,我应该怎么做?

谢谢

4 个答案:

答案 0 :(得分:4)

也许使用SuspendLayout()ResumeLayout()会有效。

来自MSDN:

  

SuspendLayout和ResumeLayout   方法用于串联抑制   你有多个布局事件   调整的多个属性   控制。例如,你会的   通常调用SuspendLayout   方法,然后设置大小,位置,   Anchor,或者Dock的属性   控制,然后调用   ResumeLayout方法启用   更改生效。

答案 1 :(得分:1)

你可以创建一个“加载”面板,并在加载时临时覆盖整个表单。您可以在调用Form.Show之前尝试在布局管理器上调用PerformLayout,以使它们能够预先加载布局任务。

启动画面很容易。您可以显示最顶层的表单,并在显示完主表单时将其关闭,也许在Activated事件中。

答案 2 :(得分:1)

在你的主要:

    MyMainForm hostInterface;

    static void Main( )
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        hostInterface = new HostInterface();
        // do some stuff to get the form ready
        // here you can optionally instance a splash screen
        MySplashScreen splash;
        hostInterface.Load += splash.Close();    // <- might not be 100% accurate
        splash = new MySplashScreen();


        Application.Run(hostInterface);
    }

了解这对您有何帮助。不同之处在于您在运行任何内容之前实例化表单。我提出了一个实例化闪屏的选项。

将上述内容与标准的自动生成代码进行比较:

static void Main( )
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new MyMainForm());
        }

即使没有添加启动画面,我也发现声明MyMainForm myform = new MyMainForm()Application.Run(new MyMainForm())

之前加载所有控件的效果更好

答案 3 :(得分:1)

@Kevin有正确的想法,这是我会用的方法:

  1. 在表单上放置一个Panel并将Dock设置为Fill,使其覆盖整个表单。
  2. 将ProgressBar拖放到面板的中心,Style属性设置为Marquee。这将使它不断滚动。
  3. 现在,在表单构造函数的末尾(或Load事件处理程序,如果您正在使用它),调用面板的SendToBack()方法以显示完全呈现的控件。