将WindowState设置为最大化会导致窗口显示得太早

我读到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);
        }
    }
}

这反过来导致显示的窗体闪烁很多,而它的控件(在Form.Load事件期间Form.Load )会在窗口可见时调整大小。 如果我没有将状态设置为最大化,那么在显示窗口之前完成所有调整大小(这是我所期望的)。

我可以暂停设置WindowState直到Load事件结束,但仍然会导致大量闪烁,因为窗口变得可见,然后所有控件都调整大小。

有什么想法吗?


尝试延迟WindowState的更改,直到第一个激活事件触发。 这适用于VS.NET中的VS2005和框架2.0。


如果您需要在Load事件中放置一些诊断消息,请使用System.Diagnostics.Debug.WriteLine();
如果您使用MessageBox,则会破坏正常的事件流顺序。

protected override void OnLoad(EventArgs e)         
{             
     System.Diagnostics.Debug.WriteLine("onLoad");              
     base.OnLoad(e);         
} 

这篇文章解释更多细节


您必须设置WindowState BEFORE InitializeComponent():

    public Form() //Constructor
    {
        WindowState = FormWindowState.Maximized;

        InitializeComponent();
    }
链接地址: http://www.djcxy.com/p/58407.html

上一篇: Setting WindowState to Maximized causes window to appear too early

下一篇: How to setup for jQuery