1

最初にメイン フォームをロードし、その上にダイアログとしてロードする 2 番目のフォームが必要です。次のことを試してみると、proFileDialog が読み込まれ、proFileDialog を閉じるまで mnuForm は非表示のままになります。タイマーに関連付けることはできますが、C# を学習するために、順番どおりに読み込まれないのはなぜですか。適切に動作させるにはどうすればよいですか?

private void mnuForm_Load(object sender, EventArgs e)
{
    this.FormBorderStyle = FormBorderStyle.None;
    this.WindowState = FormWindowState.Maximized;

    using (Form proFileDialog = new Form())
    {
        proFileDialog.Text = "Some new form";
        proFileDialog.FormBorderStyle = FormBorderStyle.None;
        proFileDialog.Opacity = 100;
        proFileDialog.StartPosition = FormStartPosition.CenterScreen;

        // form.Controls.Add(...);
        proFileDialog.ShowDialog();
    }
}
4

2 に答える 2

3

MSDNによると、フォームが表示される前に FormLoad イベントが発生します。2 番目のフォームをダイアログとして表示しているため、FormLoad イベントが終了する前にその行で停止します。できることは、モーダル ダイアログを表示するために呼び出されるメイン フォームに関数を作成することです。

public void ShowProfileDialog()
{
    Form proFileDialog = new Form();
    profileDialog.ShowDialog()
}

メインフォームを呼び出すとき:

mnuForm mainform = new mnuForm();
mnuForm.Show();
mnuForm.ShowProfileDialog();

このようにして、メイン フォームが完全にロードされたので、別のフォームを表示できます。

于 2013-07-25T00:45:40.377 に答える
3

Windows フォームのイベントの順序に関する MSDN のドキュメントによると、コントロールはLoadイベントの後まで表示されないようです。

あなたのShownイベントにサブスクライブしてmnuForm、そこにコードを配置してみてください。mnuFormこれは、起動時に実行される最後のイベントであり、mnuForm既に表示されているはずです。

また、profileDialogフォームは 1 回だけ表示されます。

Shown イベントは、フォームが最初に表示されたときにのみ発生します。その後、最小化、最大化、復元、非表示、表示、または無効化して再描画しても、このイベントは発生しません。

于 2013-07-25T00:48:45.753 に答える