4

我有一个复杂的 win 表单,有很多控件和大量的重绘,控件根据用户屏幕调整大小和定位,这会导致在进行一些渲染和重绘时显示表单。

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

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

谢谢

4

4 回答 4

4

也许使用SuspendLayout()ResumeLayout()会起作用。

来自 MSDN:

SuspendLayout 和 ResumeLayout 方法一起使用,以在您调整控件的多个属性时抑制多个 Layout 事件。例如,您通常会调用 SuspendLayout 方法,然后设置控件的 Size、Location、Anchor 或 Dock 属性,然后调用 ResumeLayout 方法以使更改生效。

于 2010-02-03T05:55:23.860 回答
2

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

  1. 在您的表单上放置一个面板并将 Dock 设置为 Fill 以便它覆盖整个表单。
  2. 将 ProgressBar 拖放到面板的中心,并将 Style 属性设置为 Marquee。这将使它不断滚动。
  3. 现在,在表单的构造函数(或 Load 事件处理程序,如果您正在使用它)的末尾,调用面板的 SendToBack() 方法以公开完全呈现的控件。
于 2010-02-06T07:01:16.543 回答
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())

于 2010-02-06T06:50:41.603 回答
1

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

启动画面很简单。您可以只显示一个最顶层的表单并在主表单显示完成后关闭它,也许是在 Activated 事件中。

于 2010-02-03T06:03:05.263 回答