【问题标题】:How to show a hidden form from a different form?如何从不同的表单中显示隐藏的表单?
【发布时间】:2021-04-10 13:12:34
【问题描述】:

我有一个Form1Form2Form3Form1 是主要形式。

程序从Form1 开始,当我单击“下一步”按钮时,Form2 被调用,Form1 隐藏。

内部Form1

Form2 form2 = new Form2(this);
this.Hide();
form2.Show();

Form2 内部有一个“退出”和一个“下一步”按钮。当我点击退出按钮时,Form2 被关闭并返回到Form1,取消隐藏它。

Form2 内部和部分类内部Form2

private Form parent;
public Form2(Form caller)
{
    parent=caller;  
}

退出按钮:

this.Close();
parent.show();

然后在Form2 的“下一步”按钮上,我调用Form3 并关闭Form2

Form3 form3 = new Form3();
this.Close();
form3.Show();

现在我在Form3 中,如何从Form3 中取消隐藏/显示Form1

我知道我必须在这里列出我尝试过的解决方案,但我只是从 OOP 开始,我一直在尝试这样做。我尝试了几件事,但没有一个是有意义的,也不知道该怎么做。

澄清一下,我不想创建Form1 的新实例,我只想显示已经创建的实例。

非常感谢任何帮助。

【问题讨论】:

  • 您的 form2 构造函数接受一个 Form 参数,但是当您创建 new Form2() 时,您不提供它。为什么?错字?两个构造函数?如果您的流程适用于 Form1->2,为什么不将相同的技术应用于 Form3?
  • 关闭和隐藏表单也没什么区别
  • 是的,抱歉,Form2 构造函数中有错字。 Form1 就像一本书的索引,Form2 和 3 就像页面,所以程序的流程是每当你关闭一个页面时,你就会返回索引。 Form2 是 Index 的“下一页”,而 Form3 是 Form2 的下一页,这就是为什么我无法在通过 Form2 时使用相同的技术从 Form1 转到 Form3。
  • 当然可以; form2 知道索引,所以它可以告诉 form3 索引。任何 formX 都可以返回索引,因为在创建时创建 formX+1 的 formX 知道索引并且可以告诉创建的表单索引。索引因此无休止地传递

标签: c#


【解决方案1】:

Form1 应如下所示:

Form2 form2 = new Form2(this);
this.Hide();
form2.Show();

Form2 应如下所示:

Form3 form3 = new Form3(parent);
this.Close();
form3.Show();

您的 form2 通过 parent 成员知道您的 form1,因此它可以将您的 form1 提供给 Form3(它还应该有一个接受 Form1 的构造函数)

每个表单都应该有一个构造函数,它接受一个 Form1 并将它存储在一个父变量中。除 Form1 之外的每个表单都应将父变量传递给它创建的任何新表单

您可以使用 ctor、next 和 close 功能的继承来简化此操作


我不建议将您的类称为 Form- 将其称为 Form1,这样它就不会与 System.Windows.Forms.Form 冲突

实际上,您应该将它们都称为更好的名称——例如 MainForm、CreatePersonForm 和 CreateAddressForm

【讨论】:

  • 非常感谢!我不认为你可以通过这种方式将 Form1 传递给所有其他表单,但我现在明白了。我非常感谢您的帮助,并且肯定会接受您的建议。再次感谢:)
猜你喜欢
  • 2017-08-30
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多