将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