4

表格代码:

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语句,则 Foo 表单在 OnLoad 事件中不可见(应该如此)。

为什么会这样,我能做些什么来解决这个问题?问题是当表单设置为最大化时,它在周期中显示得太早了。

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

4

1 回答 1

5

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

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

This way, you won't maximize the form until the Shown event is raised, which happens after OnLoad().

于 2012-06-05T22:59:15.320 回答