1

私は問題があります:

これが私のケースです:

私はすでに、ユーザーがそれを選択するたびに NewForm が呼び出されるように命令しています。プログラムを実行すると MainForm が呼び出され、[NewForm] をクリックすると、FirstNewForm が呼び出されて MainForm が閉じられます。しかし、作成した FirstNewForm で「Ne​​wForm」をもう一度クリックすると、SecondNewForm が呼び出されますが、FirstNewForm が閉じられません。

これが私の質問です:

FirstNewForm を閉じるにはどうすればよいですか? つまり、NewForm を呼び出すたびに CurrentForm を閉じる方法を教えてください。

MainFormがまだそこにあるときに「NewForm」をコマンドし、FirstNewFormが呼び出されたときにMainFormが閉じられたときの画像は次のとおりです。 、および2番目の画像はFirstNewFormです。FirstNewFormを呼び出したときにMainFormがすでに閉じているため、同じように見えました):

ここに画像の説明を入力

ここに画像の説明を入力

これは、FirstNewFormがまだそこにあるときに「NewForm」をコマンドし、SecondNewFormが呼び出されているときにFirstNewFormが閉じられていないときの画像です:(タスクバーに表示されている場合、そこには2つの販売システムプログラムがあるため、FirstNewFormは閉鎖されていません)

ここに画像の説明を入力

FirstNewForm を非表示にして閉じるにはどうすればよいですか?

コードは次のとおりです。

private void AddNewForm(object sender, EventArgs e)
    {
        //this.Hide();
        Form newForm = new Form();
        AddObjects(sender, e, newForm);
        UpdateTextPosition(sender, e, newForm);

        newForm.Size = new Size(1360, 735);
        newForm.Text = "Selling System";
        newForm.FormBorderStyle = FormBorderStyle.Fixed3D;
        newForm.AutoScaleMode = AutoScaleMode.Font;
        newForm.AutoScroll = true;
        newForm.AutoSizeMode = AutoSizeMode.GrowAndShrink;
        newForm.StartPosition = FormStartPosition.CenterScreen;
        newForm.MaximizeBox = false;
        newForm.Controls.Add(label1);
        newForm.Controls.Add(label2);
        newForm.Controls.Add(label3);
        newForm.Controls.Add(label4);
        newForm.Controls.Add(label5);
        newForm.Controls.Add(label6);
        newForm.Controls.Add(label7);
        newForm.Controls.Add(menuStrip1);

        //newForm.ShowDialog();

        //this.Close();

        if(this.InvokeRequired)
        {
            Action act = () =>
            {
                this.Hide();
            };

          this.Invoke(act);
        }

        else
        {
          this.Hide();
        }
    }

前もって感謝します!長い投稿を投稿している場合は申し訳ありません

4

2 に答える 2

1

ShowDialogモーダル ダイアログを表示します。これは、呼び出しnewForm.ShowDialog()がブロックされthis.Close()、新しいフォームを閉じた後にのみ到達することを意味します。メイン フォームを呼び出しthis.Hide()て非表示にし、プログラムを終了するときにすべてのフォームを一緒に閉じることができます。

this.Hide();

newForm.ShowDialog();

this.Close();

編集

への呼び出しがthis.Hide()UI スレッドに適切にディスパッチされていないように見える場合があるため、フォームを非表示にすることを拒否しています。試す

if(this.InvokeRequired){
     Action act = () => {
          this.Hide();
     }
     this.Invoke(act)
}
else{
     this.Hide();
}

'もう編集しない

private void AddNewForm(object sender, EventArgs e)
{
    ...

    if(this.InvokeRequired)
    {
        Action act = () =>
        {
            this.Hide();
        };

      this.Invoke(act);
    }

    else
    {
      this.Hide();
    }

    newForm.ShowDialog();

}
于 2013-08-21T07:31:53.770 に答える
0

メインフォームでは、両方の子フォーム イベント ハンドラに OnFormClosed を割り当てる必要があります。そこでは、適切に反応し、各子フォームの動作を適切に制御できます。

于 2013-08-21T07:28:03.830 に答える