System.StackOverflowException by forms

落花浮王杯 提交于 2020-01-06 15:06:16

问题


I'm trying to open another form with a button and it's only ok at the beginning. After a few forms made the stackoverflow error acours ! The error is on form 1, form 2 and form 3 (I started to debug multiple times): the codes are really simple. like for form 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();
    }
}

(added from the comment, especially to preserve code indentation (MI))

The above error is solved(using statement) Now the problem is when i wan't to save values from textbox to the access database. The code: Form1 users=new Form1(); private void button1_Click(object sender, EventArgs e) { string conString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=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();
        }
    }
}

When i wan't to pass the values it show a massage that there is an error in the data type in conditional expression .


回答1:


So, Form2 instances a new Form3 when it's constructed, Form3 instances a new Form5 on construction... maybe Form5 even instances yet another form, which instances another one and so on? In my opinion, you declared your classes in a way so that instancing one of them actually instances a lot of other form objects, and maybe there's even a circular reference (e.g. Form3=>Form5=>Form???=>...=>Form3=>Form5=>Form???=>... forever), so you're stuck in infinite recursion in the constructors of your forms.

If things are like that, if possible for your program logic, you should move your declarations of the forms inside the method that shows them, better if enclosed inside a using statement: in this way they get instanced only when they are needed, and are destroyed exactly when they are no longer used.



来源:https://stackoverflow.com/questions/2727986/system-stackoverflowexception-by-forms

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!