我有一个复杂的 win 表单,有很多控件和大量的重绘,控件根据用户屏幕调整大小和定位,这会导致在进行一些渲染和重绘时显示表单。
有没有办法在显示之前加载 UI 并准备它?我的意思是在整个重绘事件完成后显示最终的 UI。
如果使用启动画面,在加载主窗体之前,我应该怎么做?
谢谢
我有一个复杂的 win 表单,有很多控件和大量的重绘,控件根据用户屏幕调整大小和定位,这会导致在进行一些渲染和重绘时显示表单。
有没有办法在显示之前加载 UI 并准备它?我的意思是在整个重绘事件完成后显示最终的 UI。
如果使用启动画面,在加载主窗体之前,我应该怎么做?
谢谢
也许使用SuspendLayout()和ResumeLayout()会起作用。
来自 MSDN:
SuspendLayout 和 ResumeLayout 方法一起使用,以在您调整控件的多个属性时抑制多个 Layout 事件。例如,您通常会调用 SuspendLayout 方法,然后设置控件的 Size、Location、Anchor 或 Dock 属性,然后调用 ResumeLayout 方法以使更改生效。
@Kevin 有正确的想法,这是我将使用的方法:
在你的主要:
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())
您可以创建一个“加载”面板,并在加载时临时用它覆盖整个表单。您可以在调用 Form.Show 之前尝试在布局管理器上调用 PerformLayout 以使它们预先加载布局任务。
启动画面很简单。您可以只显示一个最顶层的表单并在主表单显示完成后关闭它,也许是在 Activated 事件中。