我得到一个奇怪的错误,我记得以前没有。我试图为一个小游戏制作一些菜单但是我对Form1的引用有些不对劲。
以下是代码:
public partial class Form1 : Form
{
Form2 Form2 = new Form2();
Form3 Form3 = new Form3();
public string difficulty = "Makkelijk";
public string guesses = "Normaal";
public Form1()
{
InitializeComponent();
}
private void playButton_Click(object sender, EventArgs e)
{
//Form3.difficulty = difficulty;
//Form3.guesses = guesses;
Form3.Show();
this.Hide();
}
private void optionsButton_Click(object sender, EventArgs e)
{
Form2.Show();
this.Hide();
}
private void exitButton_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
窗体2:
public partial class Form2 : Form
{
Form1 Form1 = new Form1();
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//Woord toevoeg query
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
private void button3_Click(object sender, EventArgs e)
{
//Form1.difficulty = comboBox1.Text;
//Form1.guesses = comboBox2.Text;
this.Close();
}
}
这有什么问题吗?
提前致谢。
答案 0 :(得分:4)
这是因为您正在初始化Form2
内的Form1
以及初始化Form2
的{{1}},这会进行循环初始化并导致堆栈溢出异常。
答案 1 :(得分:1)
您正在Form1
的{{1}}和Form2
的ctor中创建新的Form2
。
每次你创建其中一个,你也会创建另一个,所以你进入一个无限循环,它会逐渐填满你的堆栈。
答案 2 :(得分:0)
Form1的第一行创建一个新的Form2。 Form2的第一行创建一个新的Form1。这将继续发生,直到你的内存不足为止。
删除
Form1 Form1 = new Form1();
来自Form2定义。
答案 3 :(得分:0)
如前所述,循环初始化导致您的异常。
解决它的一种方法是使Form2接受Form1作为构造函数参数。
Form1 form;
public Form2(Form1 form1)
{
form = form1;
InitializeComponent();
}