WinForm显示和隐藏拼图

时间:2016-01-14 20:21:47

标签: c# winforms

我在显示和隐藏两个表单时遇到问题。 我的应用程序首先创建一个带有一个按钮(btnToggle)和一个复选框的表单,另一个表单保持隐藏状态(form2)。

我没有得到我期望的行为,这将在下面解释。

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





    }

1 个答案:

答案 0 :(得分: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;
}