设置为最大化的WinForm在循环中显示得太早

时间:2012-06-05 22:30:20

标签: c# .net winforms .net-4.0 resize

表单代码:

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滑稽动作并没有真正解决问题。

1 个答案:

答案 0 :(得分:4)

这种问题通常需要仔细考虑一下你是如何做事的。您可以按顺序重新考虑加载,绑定和显示表单的策略。但是,对于一个简单的解决方案,您可以这样做:

Foo foo = new Foo();
foo.Shown += (s, a) => foo.WindowState = FormWindowState.Maximized;            
foo.ShowDialog();

这样,在引发Shown事件之前,您不会最大化表单,这会在OnLoad()之后发生。