Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何关闭无模式对话框的所有打开实例?_C#_Winforms - Fatal编程技术网

C# 如何关闭无模式对话框的所有打开实例?

C# 如何关闭无模式对话框的所有打开实例?,c#,winforms,C#,Winforms,我有一个C#winform项目,它根据用户的搜索条件显示结果列表。对于列表中的每个项目,用户可以打开一个无模式对话框,显示有关所选项目的更多详细信息 每次用户打开“我的详细信息”窗口的实例时,都会运行以下代码: public void showDetails() { GetDetails route = new GetDetails(); route.myParent = this; route.Show(); } 为了比较两个或多个项目之间的详细信息,允许用户打开此对

我有一个C#winform项目,它根据用户的搜索条件显示结果列表。对于列表中的每个项目,用户可以打开一个无模式对话框,显示有关所选项目的更多详细信息

每次用户打开“我的详细信息”窗口的实例时,都会运行以下代码:

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);
    }
}

保留打开的屏幕列表怎么样?然后迭代并关闭表单。