【问题标题】:Show this form from within new form instance在新表单实例中显示此表单
【发布时间】:2012-05-19 16:07:33
【问题描述】:

我使用“添加新项目”在 C# 中创建了两个表单。 Form1 是我的默认打开表单。我正在使用以下代码切换到form2:

Form1 class:
    Form form2= new form2();
                this.Hide();
                form2.Show();  



Form2 class:

我应该怎么做才能再次打开同一个form1而不创建form1的新瞬间?

【问题讨论】:

  • 你想在哪里调用form1实例?关闭 form2 后在 form1 本身还是在 form2 实例中?
  • 我已经发布了解决方案。希望对您有所帮助!

标签: c# winforms


【解决方案1】:

您应该将 this 的一个实例传递给 form2 并在时机成熟时将其 .Show() 它。

【讨论】:

  • 我应该如何将form1的实例传递给form2?
  • 在 Form2 上创建一个 Form1 类型的属性。实例化后,设置属性。您还可以选择创建第二个构造函数,该构造函数将 Form1 作为参数并设置属性。但是不要放弃无参数构造函数,否则设计器将无法工作。
【解决方案2】:

一个简单的解决方案可以是模态显示第二个表单,然后在第二个表单关闭时使第一个表单可见,如下所示:

  public partial class Form1: Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      Form2 form2 = new Form2();
      this.Hide();
      form2.ShowDialog();
      this.Show();
    }
  }

  public partial class Form2: Form
  {
    public Form2()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      Close();
    }
  }

以非模态方式进行这项工作留作练习 :)

【讨论】:

  • 这不是作业。我正在处理专业应用程序
  • 没问题,我们以前在大学有类似的任务,这是我问的唯一原因。
  • 好的,你可能想用这个额外的信息更新问题。你想像我上面那样做,还是把第二个表格放在前面?
  • 是的,我真的很抱歉。我只想知道当我关闭 form2 时 form1 应该再次打开。我应该如何修改你的代码?
  • @fawad,这正是我的代码所做的。你试过了吗?在 Form1 和 Form2 上放置一个按钮,连接事件处理程序并按下按钮(或简单地关闭第二个表单)以获得所需的效果。
【解决方案3】:

当您执行 form2.hide() 时,您实际上是在 隐藏 而不是 破坏 它 所以您创建的实例仍然存在,因此您可以使用它再次显示它

如果你使用 form2.dispose() 那么你必须创建一个新实例

【讨论】:

    【解决方案4】:

    在form2后面的代码中,在构造函数中添加参数

    Form2(Form form1)
    {
       //use form1 object here
       //you can declare a variable of Form1 in Form2 and use it everywhere in the scope of form2
    }
    

    然后在初始化form2的对象时:

    Form form2 = new Form(this);
    this.Hide();
    form2.show();
    

    【讨论】:

    • 'form.form2' 不包含带 1 个参数的构造函数
    • 这就是我在第一个代码中提到的向 form2 构造函数添加参数public Form2(Form form1)
    • 在哪里添加该参数。我真的很抱歉。
    猜你喜欢
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 2013-01-22
    • 2019-02-03
    相关资源
    最近更新 更多