Setting WindowState to Maximized causes window to appear too early
Solution 1
Try to delay the change of WindowState until the first Activated event firing. This works for me in VB.NET with VS2005 and framework 2.0.
Solution 2
You have to set WindowState BEFORE InitializeComponent():
public Form() //Constructor
{
WindowState = FormWindowState.Maximized;
InitializeComponent();
}
Solution 3
If you need to put some diagnostic message in the Load event use System.Diagnostics.Debug.WriteLine();
If you use MessageBox, you will destroy the normal flow order of events.
protected override void OnLoad(EventArgs e)
{
System.Diagnostics.Debug.WriteLine("onLoad");
base.OnLoad(e);
}
This post explain more details
user1283610
Updated on June 25, 2022Comments
-
user1283610 almost 2 years
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 theWindowState
property set toFormWindowState.Maximized
(either via the VS designer, or programatically in the constructor), the window becomes visible prior to theLoad
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 theLoad
event, but that still causes a lot of flickering because the window becomes visible and then all of the controls resize.Any thoughts?