表单代码:
public partial class Foo: Form
{
public Foo()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
// Form already visible here when Maximized from calling code
base.OnLoad(e);
}
}
致电代码:
Foo foo = new Foo();
foo.WindowState = FormWindowState.Maximized;
foo.ShowDialog();
当代码进入OnLoad事件时,Foo表单已经显示在屏幕上。如果我删除了foo.WindowState = FormWindowState.Maximized
语句,那么在OnLoad事件中就不会看到Foo表单(应该是这样)。
为什么要解决这个问题我该怎么做?问题在于,当表单设置为Maximized时,它在周期中显示得太早。
请注意,有一个similar问题,但它主要关注UI滑稽动作并没有真正解决问题。
答案 0 :(得分:4)
这种问题通常需要仔细考虑一下你是如何做事的。您可以按顺序重新考虑加载,绑定和显示表单的策略。但是,对于一个简单的解决方案,您可以这样做:
Foo foo = new Foo();
foo.Shown += (s, a) => foo.WindowState = FormWindowState.Maximized;
foo.ShowDialog();
这样,在引发Shown
事件之前,您不会最大化表单,这会在OnLoad()
之后发生。