我读到Load事件应该在创建窗口句柄之后但在窗口实际可见之前被触发.在大多数情况下,这似乎是真的.但是,我发现当我创建一个WindowState属性设置为FormWindowState.Maximized(通过VS设计器,或在构造函数中以编程方式设置)的窗体时,窗口在Load事件触发之前变得可见.例如:
using System;
using System.Windows.Forms;
namespace MyApplication
{
public partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
WindowState = FormWindowState.Maximized;
}
protected override void OnLoad(EventArgs e)
{
MessageBox.Show("OnLoad - notice that the window is already visible");
base.OnLoad(e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这反过来导致显示的形式闪烁很多,Form.Load同时在窗口可见时调整其控件(在事件期间布局)的大小.如果我没有将状态设置为最大化,则在显示窗口之前完成所有调整大小(这是我预期的).
我可以推迟设置WindowState直到Load事件结束,但仍然会导致大量闪烁,因为窗口变得可见,然后所有控件都会调整大小.
有什么想法吗?