设置为最大化的WinForm在周期中显示得太早

Ang*_*ker 4 .net c# resize .net-4.0 winforms

表单代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

调用代码:

Foo foo = new Foo();
foo.WindowState = FormWindowState.Maximized;
foo.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

当代码进入OnLoad事件时,Foo窗体已经显示在屏幕上。如果我删除该foo.WindowState = FormWindowState.Maximized语句,则Foo表单在OnLoad事件中不可见(应该如此)。

为什么会这样,怎么办才能解决此问题?问题在于,将表单设置为“最大化”时,它在周期中显示得太早了。

请注意,有一个类似的问题,但它只关注UI滑稽动作,并没有真正解决问题。

Igb*_*man 5

这种问题通常需要对您的工作方式进行仔细的考虑。您可能需要重新考虑一下加载,绑定和显示表单的策略。但是,对于一个简单的解决方案,您可以这样做:

Foo foo = new Foo();
foo.Shown += (s, a) => foo.WindowState = FormWindowState.Maximized;            
foo.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

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

  • [是5年前报告的](http://connect.microsoft.com/VisualStudio/feedback/details/288032),这是一个错误。遗憾的是,微软不再真正投资于改进Winforms平台了。 (2认同)