1

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

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

    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 键,则 from 在实际状态下令人惊讶地显示

我试图寻找这个问题并发现了很多类似的问题,但我能看到的最接近的是以下问题,但在 showdialog 的情况下它仍然无法帮助我

C#表单问题:新表单失去控制并随机隐藏

如果使用上面链接中的以下代码,每当我打开一个子表单然后再打开一个子表单时。所有表格都被隐藏。所以它也不能正常工作。

    public void openNextForm(Form f1, Form f2)
    {
        f2.Owner = f1;            
        f2.Show();
        f1.Hide();
        f2.FormClosing += new FormClosingEventHandler(f_FormClosing);
    }

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

4

1 回答 1

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();
    }
于 2012-09-08T20:33:16.647 回答