2012-09-06 107 views
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(); 
    } 

关闭子窗体我用来显示所有者/父窗体。它工作正常。

但在某些情况下,当它显示关闭子窗体像

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

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

+0

检查回答了你的问题,下文称,其中规定,你不应该向孩子表明之前隐藏父,而你没有这样做。 –

+0

@Furqan我需要实际showdialog和对话框的情况下,我必须showdialog之前隐藏,否则两种形式将显示。尽管如此,我的表现仍然像我的代码一样。 – Sami

+0

解决它或投票它使任何显着。 – Sami

回答

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

很好的理由。谢谢。我从来没有见过像f2.Shown + =(s,e)=> {f1.Hide(); }但是,我只是测试它接受。 – Sami

+0

它的工作完美的工作。大把戏。非常感谢。很高兴为您呈现赏金:) – Sami

+0

这将需要11个小时,然后我可以奖励赏金:) – Sami