C# 如何关闭子窗口和所有单步子窗口
我有一个跟踪工作时间的应用程序。非常基本。我在主winform上有一个按钮,上面写着报告。打开“报告”对话框时,会有一组按钮打开其他对话框以执行操作 我正在尝试退出“报告”对话框,同时关闭所有子窗口。如果报告对话框关闭,则报告对话框的所有子窗口都应关闭,但时间跟踪应保持打开状态。我相信这些是非模态窗口。我可以在不关闭父对话框的情况下与所有对话框进行交互C# 如何关闭子窗口和所有单步子窗口,c#,winforms,C#,Winforms,我有一个跟踪工作时间的应用程序。非常基本。我在主winform上有一个按钮,上面写着报告。打开“报告”对话框时,会有一组按钮打开其他对话框以执行操作 我正在尝试退出“报告”对话框,同时关闭所有子窗口。如果报告对话框关闭,则报告对话框的所有子窗口都应关闭,但时间跟踪应保持打开状态。我相信这些是非模态窗口。我可以在不关闭父对话框的情况下与所有对话框进行交互 private void StartForm_Click(object sender, EventArgs e) {
private void StartForm_Click(object sender, EventArgs e)
{
Start f1 = new Start();
f1.Owner = this;
f1.Show();
}
所以基本上我有:
MainForm>ChildForm>ManyStepChildren(??)这就是我试图关闭孩子和继子女的方式
private void Close_Click(object sender, FormClosingEventArgs e)
{
this.Dispose(); //did not work
this.Exit(); //Crashed the entire application
}
任何人都可以为我指出正确的方向。您正在从
报告窗口创建所有子窗口以显示右侧?为什么不保留这些子窗口的列表
,并在报告
窗口的关闭事件中,遍历所有子窗口并将其全部关闭?
假设这是您的子表单
public class ChildForm: Form/Window
{
private IList<Form/Window> _childWindows = new List<Form/Window>();
private void ButtonClickTahWillOpenSomeChild(....)
{
var childWindow = new ChildWindow();
// you might want to check if it already exists before adding in case someone clicks button twice
_childWindows.Add(childWindow);
// your code
}
// other click handlers that will open another child windows
private void ChildForm_Close(...)
{
foreach(var window in _childWindows)
{
window.Close();
}
// rest of your code
}
}
公共类子窗体:窗体/窗口
{
私有IList_childWindows=新列表();
私有无效按钮ClickTahWillopenSomeChild(..)
{
var childWindow=新的childWindow();
//在添加之前,您可能需要检查它是否已经存在,以防有人单击按钮两次
_添加(childWindow);
//你的代码
}
//将打开另一个子窗口的其他单击处理程序
私有无效子窗体关闭(…)
{
foreach(子窗口中的变量窗口)
{
window.Close();
}
//代码的其余部分
}
}
@γηρρσκω′αεπλλλδασκμε
回答得很好。非常感谢。我肯定会读到更多关于主人的信息。我可以看到它变得非常强大
根据@γηρράσκωδ'αεπολλάδασκμε,答案是将孙子对话框的所有权授予报告
private void bSubmitTime_Click(object sender, EventArgs e)
{
//TrackChildForm();
SubmitTime sf1 = new SubmitTime();
sf1.Owner = this;
sf1.Show();
}
然后退出到just.Close()时。我选择了.Dispose(),因为有人告诉我这将使系统更干净一些。试图清晰地编写代码:-D
private void Close_Click(object sender, FormClosingEventArgs e)
{
Form1 p = (Form1)this.Owner;
Control[] c = p.Controls.Find("bStartForm", true);
Button b = (Button)c[0];
b.Enabled = true;
this.Dispose();
}
谢谢大家的回应。我真的很感激。祝你今天愉快!!:-) 只是一句愚蠢的话,但你不是指孙子孙女吗?:)@好的。对孙辈:-DIf如果关闭“子”窗口,所有孙辈/继子女将自动关闭。这个。关闭();足够了。您必须以与StartForm_Click()中相同的方式创建孙子/继子代。否。每次创建表单时,都以与为子代创建表单时相同的方式设置其所有者。您的答案肯定是跟踪正在打开的表单。谢谢你让我走了这么远。我很感激。不过,这些表格并没有关闭。等等,这很适合跟踪,但它没有关闭窗口。让我有了一个很好的主意,可以将表单名称放在内存中以供阅读。:-)谢谢@michael moore