我有一个跟踪工作时间的应用程序。非常基本的。我在主要winform上有一个按钮,上面写着Reports。打开“报告”对话框时,会出现一组按钮,用于打开其他对话框以执行操作。
我尝试退出“报告”对话框并同时关闭所有子窗口。如果“报告”对话框关闭,“报告”对话框的所有子窗口都应关闭,但时间跟踪应保持打开状态。我相信这些是无模式的窗户。我可以在不关闭父对话框的情况下与所有对话框进行交互。
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
}
任何人都可以指出我正确的方向。
答案 0 :(得分:2)
@γηράσκωδ'αείπολλάδιδασκόμε
很棒的答案。谢谢。我肯定会阅读更多关于.Owner我可以看到它变得非常强大。
Per@γηράσκωδ'αείπολλάδιδασκόμε答案是将孙子对话框的所有权交给报告
private void bSubmitTime_Click(object sender, EventArgs e)
{
//TrackChildForm();
SubmitTime sf1 = new SubmitTime();
sf1.Owner = this;
sf1.Show();
}
然后退出时只关闭.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();
}
感谢大家的回复。对此,我真的非常感激。祝你有美好的一天!! : - )
答案 1 :(得分:0)
您是否正在从Report
窗口创建所有子窗口以显示正确的内容?为什么不保留List
这些子窗口,并在Report
窗口的关闭事件中,通过所有子窗口迭代并关闭它们?
让我们说这是你的ChildForm
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
}
}