StackOverflowException未处理C#

时间:2014-02-15 13:05:08

标签: c# exception stack-overflow

我得到一个奇怪的错误,我记得以前没有。我试图为一个小游戏制作一些菜单但是我对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();
    }
}

这有什么问题吗?

提前致谢。

4 个答案:

答案 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();
}