表单的System.StackOverflowException

时间:2010-04-28 08:53:41

标签: c# winforms stack-overflow

我正在尝试用一个按钮打开另一个表单,它一开始就没问题。几个表格后,stackoverflow错误acours! 错误在表单1,表单2和表单3(我开始多次调试):代码非常简单。喜欢表格3:

public partial class Form2 : Form
{
    Form3 obrok = new Form3();
    public Form2()
    {
        InitializeComponent();
    }

    public void textBox1_TextChanged(object sender, EventArgs e)
    {
    }

    private void button1_Click(object sender, EventArgs e)
    {
        obrok.Show();
        this.Hide();
    }
}

从评论中添加,特别是为了保留代码缩进(MI)

上述错误已解决(使用语句)现在问题是我不想将值从文本框保存到访问数据库。代码: Form1 users = new Form1();         private void button1_Click(object sender,EventArgs e)         {             string conString =“Provider = Microsoft.Jet.OLEDB.4.0;”          +“数据源= C:\ Users \ Simon \ Desktop \ save.mdb”;

        OleDbConnection empConnection = new OleDbConnection(conString);


        string insertStatement = "INSERT INTO obroki_save "
                             + "([ID_uporabnika],[datum],[ID_zivila],[skupaj_kalorij]) "
                             + "VALUES (@ID_uporabnika,@datum,@ID_zivila,@skupaj_kalorij)";

        OleDbCommand insertCommand = new OleDbCommand(insertStatement, empConnection);

        insertCommand.Parameters.Add("@ID_uporabnika", OleDbType.Char).Value = users.iDTextBox.Text;
        insertCommand.Parameters.Add("@datum", OleDbType.Char).Value = DateTime.Now;
        insertCommand.Parameters.Add("@ID_zivila", OleDbType.Char).Value = iDTextBox.Text;
        insertCommand.Parameters.Add("@skupaj_kalorij", OleDbType.Char).Value = textBox1.Text;
        empConnection.Open();

        try
        {
            int count = insertCommand.ExecuteNonQuery();
        }
        catch (OleDbException ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            empConnection.Close();
            textBox1.Clear();
            textBox2.Clear();
            textBox3.Clear();
            textBox4.Clear();
            textBox5.Clear();
        }
    }
}

当我不想传递值时,它会显示按摩,条件表达式中的数据类型存在错误。

1 个答案:

答案 0 :(得分:2)

因此,Form2在构造时实例化了一个新的Form3,Form3实例构建了一个新的Form5 ......也许Form5甚至实例还有另一个形式,哪个实例另有一个,依此类推?在我看来,你以一种方式声明你的类,以便实例化其中一个实际上很多其他形式对象的实例,也许甚至有一个循环引用(例如Form3 => Form5 => Form ??? => ... => Form3 => Form5 => Form ??? => ... forever),所以你在表单的构造函数中陷入无限递归。

如果事情是这样的,如果可能的话,你应该在显示它们的方法中移动表单的声明,如果包含在using语句中更好:这样它们只在需要时才得到实例,并且当它们不再使用时被完全销毁。