1

パネルにいくつかのフォームを追加しました。フォームにはプロパティがあります

form.TopLevel = false;
form.Parent = pnlMain;

ここで、pnlMainのすべてのフォームを繰り返し処理し、すべてのフォームを閉じます。そのために、次のコードがあります。

private void CloseForms()
{
    foreach(Form form in pnlMain.Controls.OfType<Form>())
        form.Close();
}

私の問題は、すべてのフォームが閉じているわけではないということです。

4つのオープンフォームの例:オープンフォームを数えましたが、

int count = pnlMain.Controls.OfType<Form>().Count();

CloseFormsを呼び出すと、2つのフォームのみが閉じられます。他の2つは、CloseFormsでの別の呼び出しで閉じられます。

1回の呼び出しですべてのフォームを閉じるにはどうすればよいですか?

4

1 に答える 1

5

繰り返し処理中にコレクションを変更しないでください。これを試して

foreach(Form form in pnlMain.Controls.OfType<Form>().ToArray())
于 2012-09-12T11:38:36.497 に答える