2016-01-14 35 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

是的,我越来越困惑。 –