如何返回具有构造函数的Form

时间:2015-01-28 02:33:11

标签: c#

我对C#很新,并且遇到了这个问题,我现在已经苦苦挣扎了近一个星期(在你问之前......我继续我的项目然后回到这个问题这就是为什么它已经很久了)

所以我的项目有14个表格

我的问题如下

Form1代码:

Form2 frm2 = new Form2();
frm2.Show();
this.Close();

Form2代码:

Form3 frm3 = new Form3(lbl1.Text, lbl2.Text, lbl3.Text);
frm3.Show();
this.Close();

Form3代码:

Form4 frm4 = new Form4;
frm4.Show();
this.Close();

关闭Form4之后我需要回到Form3但是如果我要在Form4中编写以下代码

Form4代码:

Form3 frm3 = new Form3();
frm3.Show();
this.close();

我收到一条错误消息告诉我:

“...............不包含包含0个参数的构造函数”

我理解这条消息的内容,但我不知道如何绕过它

3 个答案:

答案 0 :(得分:1)

如果Form3具有该构造函数,则意味着它需要正确初始化这三个字符串:

Form3 frm3 = new Form3(lbl1.Text, lbl2.Text, lbl3.Text);

因此,在没有这些字符串的情况下创建Form3的新副本是没有意义的。

另一方面,我认为你真正的意思是你不想关闭 Form3,只是隐藏它,然后再显示它。通常的做法是拥有一个主表单,它将子表单的实例保存为成员或属性。

MainForm代码:

Form1 frm1 = new Form1;
Form2 frm2 = new Form2;
Form3 frm3 = new Form3("", "", ""); // start with default values
Form4 frm4 = new Form4;

Form1代码:

this.Hide();
MainForm.frm2.Show();

Form2代码:

this.Hide();
MainForm.frm3 = new Form3(lbl1.Text, lbl2.Text, lbl3.Text); // use values from frm2
MainForm.frm3.Show();

Form4代码:

this.Hide();
MainForm.frm3.Show();

答案 1 :(得分:0)

嗯,你有两种选择。

1)使用适当的参数调用现有的构造函数,就像在Form2上一样。

2)创建一个没有参数的构造函数

public Form3()
{ 
     // constructor logic
}

答案 2 :(得分:0)

将表单属性添加到Form4以保存Form3

的实例
public Form frmHolder { get; set; }

Form3

Form4 frm4 = new Form4();
frm4.frmHolder = this;
frm4.Show();
this.Close();

Form4

Form3 frm3 = frmHolder;
frm3.Show();
this.close();