将WindowState设置为Maximized会导致窗口过早出现
本文关键字:窗口 设置 WindowState Maximized | 更新日期: 2023-09-27 18:28:36
我读到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
事件期间布置)在窗口可见时调整大小。如果我没有将状态设置为最大化,那么所有的调整大小都会在窗口显示之前完成(这是我所期望的)。
我可以推迟设置WindowState
,直到Load
事件结束,但这仍然会导致很多闪烁,因为窗口变得可见,然后所有控件都会调整大小。
有什么想法吗?
尝试将WindowState的更改延迟到第一个Activated事件触发。这对我来说适用于带有VS2005和framework 2.0的VB.NET。
您必须设置WindowStateBEFOREInitializeComponent():
public Form() //Constructor
{
WindowState = FormWindowState.Maximized;
InitializeComponent();
}
如果需要在Load事件中放入一些诊断消息,请使用System.Diagnostics.Debug.WriteLine()
如果使用MessageBox,则会破坏事件的正常流顺序。
protected override void OnLoad(EventArgs e)
{
System.Diagnostics.Debug.WriteLine("onLoad");
base.OnLoad(e);
}
这篇文章解释了更多的细节
更改窗口外观(例如调整大小)会使窗口变得可见。
您可以在ctor中调用.Hide()
或.Visible = False
,并在的末尾使其再次可见。Load