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と、OnLoad イベントで Foo フォームが表示されなくなります (そうあるべきです)。

その理由と、問題を解決するにはどうすればよいですか? 問題は、フォームが最大化に設定されている場合、サイクルの早い段階で表示されることです。

同様の質問がありますが、UI のアンティックに焦点を当てており、実際には問題に対処していないことに注意してください。

4

1 に答える 1

5

この種の問題は通常、あなたが物事をどのように行っているかについて慎重に考える必要があります。フォームの読み込み、バインド、表示の戦略を再考する必要があるかもしれません。ただし、単純な解決策の場合は、次のようにすることができます。

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

Shownこのように、イベントが発生するまでフォームを最大化することはありません。これは、の後に発生しOnLoad()ます。

于 2012-06-05T22:59:15.320 に答える