0

我想使用以下代码在 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();   
}

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

4

2 回答 2

1

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

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

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

我会采用第一种方法。

于 2012-08-11T08:17:49.983 回答
0

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

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

所以代码实际上工作得很好,因为它完全按照它应该做的事情,它只是没有产生你想要的结果,即隐藏表单的现有实例上的面板。

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

于 2012-08-11T08:08:15.030 回答