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

时间:2015-08-13 14:18:43

标签: c# winforms

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

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

public void showDetails()
{
    GetDetails route = new GetDetails();
    route.myParent = this;
    route.Show();
}

为了比较两个或多个项目之间的细节,允许用户根据需要打开此对话框的任意数量的实例。当用户从主窗体窗口进行新搜索时,我希望能够关闭此窗口的任何和所有打开的实例吗?我试过谷歌搜索,但没有运气......有谁知道怎么做?

2 个答案:

答案 0 :(得分:0)

Application.OpenForms是应用程序拥有的开放表单的集合

尝试查找所有详细信息对话框并按以下方式关闭它们:

foreach(var f in Application.OpenForms.OfType<GetDetails>().ToList())
{
    f.Close();
}

答案 1 :(得分:0)

你真的不知道,但我认为你的GetDetails是一个System.Windows.Forms.Control(可能是一个表单,一个对话框,一个消息框等)。

如果仔细查看Form.InitializeComponent,您将看到Form具有属性Controls。所有子控件都将添加到控件集合中。

如果将每个创建的路径添加到控件集合中,您可以向此集合询问GetDetails类型的所有对象并命令它们关闭:

ViewBag

您需要确定在关闭路径,处理路由或调用以下代码时:

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