我有一个C#winform项目,它根据用户的搜索条件显示结果列表。对于列表中的每个项目,用户可以打开一个无模式对话框,显示有关所选项目的更多详细信息。
每次用户打开我的详细信息窗口的实例时,此代码都会运行:
public void showDetails()
{
GetDetails route = new GetDetails();
route.myParent = this;
route.Show();
}
为了比较两个或多个项目之间的细节,允许用户根据需要打开此对话框的任意数量的实例。当用户从主窗体窗口进行新搜索时,我希望能够关闭此窗口的任何和所有打开的实例吗?我试过谷歌搜索,但没有运气......有谁知道怎么做?
答案 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();
}
}