Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在显示之前加载所有UI控件?C#winform_C#_Winforms_Load_Splash Screen - Fatal编程技术网

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

有没有办法在显示之前加载所有UI控件?C#winform,c#,winforms,load,splash-screen,C#,Winforms,Load,Splash Screen,我有一个复杂的win表单,有很多控件和庞大的重绘,控件根据用户屏幕调整大小和位置,这会导致在进行渲染和重绘时显示表单 有没有办法在显示之前加载UI并进行准备?我的意思是在整个重新绘制事件完成后显示最终UI 如果使用闪屏,在加载主窗体之前,我应该怎么做 谢谢也许使用和会起作用 从MSDN: SuspendLayout和ResumeLayout 方法串联使用以抑制 当您执行此操作时,会发生多个布局事件 调整对象的多个属性 控制例如,你会 通常调用SuspendLayout 方法,然后设置大小、位置、

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

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

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

谢谢

也许使用和会起作用

从MSDN:

SuspendLayout和ResumeLayout 方法串联使用以抑制 当您执行此操作时,会发生多个布局事件 调整对象的多个属性 控制例如,你会 通常调用SuspendLayout 方法,然后设置大小、位置、, 锚点或码头的属性 控件,然后调用 ResumeLayout方法以启用 更改将生效

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

启动屏幕很容易。您可以只显示最顶端的表单,并在主表单显示完成后关闭它,可能是在激活的事件中。

在主表单中:

    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);
    }

即使没有添加初始屏幕,我也发现声明
MyMainForm myform=new MyMainForm()
应用程序之前加载所有控件会更好

  • 在表单上放置一个面板,并将Dock设置为Fill,使其覆盖整个表单
  • 将“样式”属性设置为“选取框”的进度条放置到面板的中心。这将使它不断滚动
  • 现在,在窗体构造函数(或加载事件处理程序,如果正在使用)的末尾,调用面板的SendToBack()方法以公开完全呈现的控件

  • 谢谢你的回复。SuspendLayout和ResumeLayout方法不起作用,因为大多数ui是由VisualStudio向导创建的,这些方法在表单的代码隐藏中自动使用。我不知道如何添加[“加载”面板]来覆盖表单,但我尝试了PerformLayout,但没有成功。我在表单中有很多自定义用户控件,我发现了双缓冲区。我将用户控件的doublebuffer属性设置为True。现在它工作得更好了。控件在显示之前加载。。。无法显示已卸载/未初始化的控件:)
    static void Main( )
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
    
                Application.Run(new MyMainForm());
            }