【问题标题】:Is there any way to load all UI controls before displaying? C# winform有没有办法在显示之前加载所有 UI 控件? C# winform
【发布时间】:2010-02-03 05:43:24
【问题描述】:

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

有什么方法可以加载 UI 并在显示之前对其进行准备?我的意思是在整个重绘事件完成后显示最终的 UI。

如果使用闪屏,在加载主窗体之前,我应该怎么做??

谢谢

【问题讨论】:

  • 控件在显示之前已加载...无法显示未加载/未初始化的控件:)

标签: c# winforms load splash-screen


【解决方案1】:

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

来自 MSDN:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 感谢您的回复。 SuspendLayout 和 ResumeLayout 方法不起作用,因为大部分 ui 是由 Visual Studio 向导创建的,并且这些方法在那里自动使用,在表单后面的代码中。我不知道如何添加 [“加载”面板] 来覆盖表单,但我尝试了 PerformLayout,但它没有用。我在表单中有很多自定义用户控件,我发现了双缓冲区。我将用户控件的双缓冲属性设置为 True。现在效果好一点了。
      【解决方案4】:

      在你的主要:

          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()) 之前的所有控件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多