简介:代码(两个函数)解释我正在尝试做的所有事情和数字告诉我的问题
每当我必须在我的应用程序中打开一个新的子表单时。我用来调用以下函数。 (儿童表格可以有另一个孩子)
public void openNextForm(Form f1, Form f2)
{
f2.Owner = f1;
f2.WindowState = FormWindowState.Maximized;
f2.FormClosing += new FormClosingEventHandler(f_FormClosing);
f1.Hide();
f2.ShowDialog();
}
// When I close a child form by clicking cross or with ALT-F4
void f_FormClosing(object sender, FormClosingEventArgs e)
{
Form f = sender as Form;
f.Owner.Show();
}
在关闭子表单时,我用来显示所有者/父表单。它工作得很好。
但是在某些情况下,所有者表单的某些控件(按钮)在关闭子表单中显示时会被隐藏,如
但此表单的实际状态为
只有当我从一个复杂且冗长的编码子窗体中退回时,我才会面对这种行为(在这种情况下,它仍可以正常工作)。在简单(小编码)子表单的情况下,行为是正常的。
如果我在奇怪的表现形式上按下alt键,则会在实际状态下出现令人惊讶的
我试图寻找这个问题并找到了很多类似的问题,但是我能看到的最接近的是如果showdialog仍然无法帮助我
C# Form Problem: new form losing control and randomly hiding
如果我使用上面链接中的以下代码,每当我打开子表单然后再打开子表单时。所有表格都是隐藏的。所以它不起作用。
public void openNextForm(Form f1, Form f2)
{
f2.Owner = f1;
f2.Show();
f1.Hide();
f2.FormClosing += new FormClosingEventHandler(f_FormClosing);
}
使用制表符应该是一个解决方案,但我希望在关闭/隐藏/显示期间保持表单分离和所有情况下的一致行为
答案 0 :(得分:1)
不确定它是否能解决问题,但我看到可以做出的一些改进可能会解决问题。
请注意,无法验证它是否有效。
public void openNextForm(Form f1, Form f2)
{
// we don't need ownership since f1 is hidden.
// f2.Owner = f1;
f2.WindowState = FormWindowState.Maximized;
// we don't need this event handled since we use ShowDialog
//f2.FormClosing += new FormClosingEventHandler(f_FormClosing);
// The following should hide f1 after f2 is displayed even when using dialog
f2.Shown += (s, e) => {
f1.Hide();
};
f2.ShowDialog();
f1.Show();
}