如何在另一个类的面板中隐藏表单?

时间:2012-08-11 07:47:18

标签: c# .net winforms panel

我想使用以下代码隐藏panel1(表单内容)中的表单:

frmChangePassword frmChangePassword = new frmChangePassword();
frmChangePassword.Hide();
没有运气。这是我在代码中显示的代码:

//SHOW CHANGEPASSWORD FORM
if (isChangePasswordActive == false)
{
     isChangePasswordActive = true;
     frmChangePassword frmChangePassword = new frmChangePassword();
     frmChangePassword.TopLevel = false;
     frmChangePassword.Parent = this.panel1;
     frmChangePassword.Show();   
}

有没有办法清除面板中的内容并在同一面板中显示新表单? 非常感谢提前。

2 个答案:

答案 0 :(得分:1)

您正在创建密码表单的新实例。您需要获取当前实例,然后将其隐藏。我有两种方式可以想到:

  1. 保留您创建的frmChangePassword对象,以在该对象上显示表单并调用hide方法。您可能需要更改该对象的范围。

  2. 使用Application.OpenForms集合获取已打开的密码表单实例并将其隐藏。

  3. 我会采用第一种方法。

答案 1 :(得分:0)

嗯,问题是你正在创建一个 new 表单,然后将该面板隐藏在该表单上。您可以告诉,因为您使用了new关键字:

frmChangePassword frmChangePassword = new frmChangePassword();
frmChangePassword.Hide();  // affects the ^^ NEW instance ^^ you just created!!

所以代码实际上工作得很好,因为它完全按照它应该做的那样,它只是不会产生你想要的结果,这是隐藏现有实例的面板形式。

这有点过分,因为您必须找到一种方法来获取对表单的现有实例的引用。为了告诉你如何重新设计你的代码,我必须看到更多的代码。通常,您编写此代码的方法(需要执行隐藏的方法)将采用类型为Form(或甚至frmChangePassword)的参数,并且调用方将传入当前要修改的表单的实例。