2016-01-14 34 views
0

我有問題顯示和隱藏兩種形式。 我的應用程序首先創建一個按鈕(btnToggle)和一個複選框以及另一個仍然隱藏的窗體(窗體2)。WinForm顯示和隱藏拼圖

我沒有得到我期待的行爲,下面將對此進行解釋。

private void btnToggle_Click(object sender, EventArgs e) 
    { 
     // note that form1 is big enough to contain form2 but form1 not maximised and form2 is not a modal form 
     // start with form1 visible form2 not visible chk box not checked 
     // click btnToggle and form2 is shown on top of form1 
     // click on form1 form2 now behind form1 
     // check chksecondFormAlwaysOnTop 
     // click btnToggle form2 is shown on top of form1 but 
     // should not go behind form1 when form1 is clicked but it does. 
     // what is wrong with the code below. 
     // I want form2 to always be on top when chksecondFormAlwaysOnTop 
     // is checked but it isnt. 
     // My code below: 

     if (Form2.Visible && Form2.TopMost) 
     { 
      Form2.Hide(); 
     } 
     else if(Form2.Visible && !Form2.TopMost) 
     { 
      Form2.BringToFront(); 
     } 
     else if (!Form2.Visible && chksecondFormAlwaysOnTop.Checked) 
     { 
      Form2.Show(); 
      Form2.TopMost = true; 
     } 
     else 
     { 
      Form2.Show(); 
      Form2.TopMost = false; 
     } 





    } 
+4

使用顯示(所有者)超載。 –

回答

3

你真正需要的是使用Form.Owner財產

要通過另一種形式擁有的形式,轉讓其所有者屬性將成爲所有者的形式引用。

當表單由另一個表單擁有時,它將被關閉或隱藏在所有者表單中。例如,考慮一個名爲Form2的窗體,它由名爲Form1的窗體擁有。如果Form1被關閉或最小化,Form2也被關閉或隱藏。所有形式也不會顯示在其所有者表單後面。您可以使用擁有的窗體來查找和替換窗口,這些窗口在選擇所有者窗體時不會消失。

假設你有以下聲明,您Form1

Form2 Form2; 

裏面你Form1加載事件,把下面的

Form2 = new Form2 { Visible = false, Owner = this }; 

,然後用簡單的

private void btnToggle_Click(object sender, EventArgs e) 
{ 
    Form2.Visible = !Form2.Visible; 
} 
+0

是的,我越來越困惑。 –