我在显示和隐藏两个表单时遇到问题。 我的应用程序首先创建一个带有一个按钮(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;
}
}
答案 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;
}