【发布时间】:2012-03-21 14:28:56
【问题描述】:
我读到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 事件结束,但这仍然会导致很多闪烁,因为窗口变得可见,然后所有控件都调整大小。
有什么想法吗?
【问题讨论】:
-
加载事件中的
MessageBox.Show将强制显示表单。 -
在
Load事件中调整控件的大小有点可疑。为什么不依赖于控件的内置调整大小机制,例如Dock或Anchor属性或TableLayoutPanel?当我稍后手动调整窗口大小时,您是否也会手动调整控件的大小? -
我也收到了。我在用户会话之间保存 WindowState,以便可以将表单的大小等调整为用户以前拥有的大小,当我将 WindowState 设置为 Maximized 时,我会出现很多闪烁等问题。有没有解决方案来解决这个问题?
标签: c# .net winforms resize windowstate