C# 从另一个窗体在面板中打开窗体并关闭现有窗体winforms

C# 从另一个窗体在面板中打开窗体并关闭现有窗体winforms,c#,winforms,C#,Winforms,我对c语言中的表单控件有问题,我的主表单有导航按钮,每个按钮打开一个不同的表单。那部分很好用 FRMBanner Banner = new FRMBanner(); Banner.TopLevel = false; panel2.Controls.Add(Banner); Banner.Show(); Banner.Dock = DockStyle.Fill; Banner.BringToFront(); 我所面临的问题是,如何计算出已打开和关闭的表单。我唯一能解决这个问题的方法是在每个表单上

我对c语言中的表单控件有问题,我的主表单有导航按钮,每个按钮打开一个不同的表单。那部分很好用

FRMBanner Banner = new FRMBanner();
Banner.TopLevel = false;
panel2.Controls.Add(Banner);
Banner.Show();
Banner.Dock = DockStyle.Fill;
Banner.BringToFront();

我所面临的问题是,如何计算出已打开和关闭的表单。我唯一能解决这个问题的方法是在每个表单上放置一个计时器,然后检查公共静态bool是否为真,如果为假,它将调用这个。close;在这一页上,我知道一定有一个更简单的方法来做到这一点,任何帮助都将是巨大的

你能详细解释一下情况是什么,为什么要检查在主窗体上创建一个列表,当你打开窗体时,也可以添加到列表中,当你关闭时,从列表中删除该列表,只需将这些控件添加到列表中,并在该列表中循环查看哪些控件被打开。如果TopLevel设置为false,则窗体将变为普通控件,与用户控件没有显著区别。您不再关闭它,就像您不再关闭按钮一样,如果需要卸载它,那么您必须调用它的Dispose方法。存储引用以便正确地执行此操作是一项非常通用的编程任务,与它是从表单派生的类这一事实无关。只要你还在使用OOP,就可以创建一个UserControl。如何从列表中关闭表单我添加了列表_forms=new list;然后在按钮中添加了_forms.AddBanner;_forms{MessageBox.Showform.ToString;form.Close;}中的foreach var form