winforms 如何在另一个类的面板中隐藏窗体?

8ulbf1ek  于 2023-02-24  发布在  其他
关注(0)|答案(3)|浏览(208)

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

有没有办法清除我面板中的内容并在同一面板中显示新表单?

6gpjuf90

6gpjuf901#

您正在创建密码窗体的新示例。您需要获取当前示例,然后将其隐藏。我可以想到两种方法:
1.保留您创建的frmChangePassword对象以显示表单并调用该对象的hide方法。您可能需要更改该对象的作用域。
1.使用Application.OpenForms集合获取密码窗体的打开示例并隐藏它。
我会先下手为强。

krugob8w

krugob8w2#

好吧,问题是你创建了一个 new 表单,然后隐藏了表单上的面板,你可以分辨出来,因为你使用了new关键字:

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

因此,代码实际上工作得很好,因为它确实做了它应该做的事情,只是没有产生预期的结果,即隐藏窗体的 * 现有示例 * 上的面板。
这就有点麻烦了,因为你必须找到一种方法来获得对窗体的现有示例的引用。为了告诉你如何重新设计你的代码来做到这一点,我必须看到更多的代码。通常,你编写代码的方法(需要隐藏的那个)将接受Form(甚至frmChangePassword)类型的参数,调用者将传入要修改的表单的当前示例。

flseospp

flseospp3#

如果你仍然需要它,你必须在你的公共类中声明一个Form类型的全局变量:

Form frm = new Form();

每次触发新的表单加载时,请确保将以下内容放在首位:从隐藏();然后使用新的形式初始化变量,该形式将显示:

frm.Hide();
        frm = new thenewForm() { Dock = DockStyle.Fill, TopLevel = false, TopMost = true };
        this.yourPanel.Controls.Add(frm);
        frm.Show();

我放在“{”中的属性可能会根据你想要的样式而改变,但是如果你想让它成为一个无边框的窗口,你可以复制这些属性。

相关问题