在关闭子表单时显示隐藏的所有者形式的奇怪行为

时间:2012-09-06 08:24:17

标签: c# winforms desktop-application show-hide formclosing

简介:代码(两个函数)解释我正在尝试做的所有事情和数字告诉我的问题

每当我必须在我的应用程序中打开一个新的子表单时。我用来调用以下函数。 (儿童表格可以有另一个孩子)

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

在关闭子表单时,我用来显示所有者/父表单。它工作得很好。

但是在某些情况下,所有者表单的某些控件(按钮)在关闭子表单中显示时会被隐藏,如

enter image description here

但此表单的实际状态为enter image description here

只有当我从一个复杂且冗长的编码子窗体中退回时,我才会面对这种行为(在这种情况下,它仍可以正常工作)。在简单(小编码)子表单的情况下,行为是正常的。

如果我在奇怪的表现形式上按下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);
    }

使用制表符应该是一个解决方案,但我希望在关闭/隐藏/显示期间保持表单分离和所有情况下的一致行为

1 个答案:

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