I read that the Load
event is supposed to be fired after the window handle has been created, but before the window actually become visible. For the most part, this seems to be true. However, I've found that when I create a form with the WindowState
property set to FormWindowState.Maximized
(either via the VS designer, or programatically in the constructor), the window becomes visible prior to the Load
event firing. For example:
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);
}
}
}
This in turn causes the displayed form to flicker a lot while its controls (which are laid out during the Form.Load
event) are resized while the window is visible. If I did not set the state to be maximized, then all the resizing is done before the window is shown (which is what I would have expected).
I could hold off on setting the WindowState
until the end of the Load
event, but that still causes a lot of flickering because the window becomes visible and then all of the controls resize.
Any thoughts?
MessageBox.Show
in the load event will force the form to show. – CrannogLoad
event is somewhat suspicious. Why don't you rely on the built-in resizing mechanisms for controls, likeDock
orAnchor
properties or theTableLayoutPanel
? Will you manually resize the controls as well when I resize the window manually later on? – Procora