C# 如何关闭无模式对话框的所有打开实例?
我有一个C#winform项目,它根据用户的搜索条件显示结果列表。对于列表中的每个项目,用户可以打开一个无模式对话框,显示有关所选项目的更多详细信息 每次用户打开“我的详细信息”窗口的实例时,都会运行以下代码:C# 如何关闭无模式对话框的所有打开实例?,c#,winforms,C#,Winforms,我有一个C#winform项目,它根据用户的搜索条件显示结果列表。对于列表中的每个项目,用户可以打开一个无模式对话框,显示有关所选项目的更多详细信息 每次用户打开“我的详细信息”窗口的实例时,都会运行以下代码: public void showDetails() { GetDetails route = new GetDetails(); route.myParent = this; route.Show(); } 为了比较两个或多个项目之间的详细信息,允许用户打开此对
public void showDetails()
{
GetDetails route = new GetDetails();
route.myParent = this;
route.Show();
}
为了比较两个或多个项目之间的详细信息,允许用户打开此对话框的任意多个实例。当用户从主窗体窗口进行新搜索时,我希望能够关闭此窗口的任何和所有打开的实例?我尝试过谷歌搜索,但没有成功。。。有人知道怎么做吗?是应用程序拥有的开放表单的集合
尝试查找所有详细信息对话框并按如下方式关闭它们:
foreach(var f in Application.OpenForms.OfType<GetDetails>().ToList())
{
f.Close();
}
foreach(Application.OpenForms.OfType().ToList()中的var f)
{
f、 Close();
}
您实际上不知道,但我假设您的GetDetails是System.Windows.Forms.Control(可能是表单、对话框、消息框等)
如果仔细查看Form.InitializeComponent,您将看到该表单具有一个属性控件。所有子控件都将添加到控件集合中
如果将每个创建的路由添加到控件集合中,则可以要求该集合提供GetDetails类型的所有对象,并命令它们关闭:
public void ShowDetails()
{
var route = new GetDetails();
route.myParent = this;
this.Controls.Add(route);
route.Show();
}
public void CloseAllRoutes()
{
foreach (var route in this.Controls.Where( control => control is GetDetails))
{
route.Close();
}
}
您需要确定,当路由器关闭、释放或执行其他操作时,会调用以下代码:
private void OnRouteClosed (object sender, ...)
{
if (sender is GetDetails)
{
this.Controls.Remove(sender);
}
}
保留打开的屏幕列表怎么样?然后迭代并关闭表单。