2012-09-06 111 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