2010-04-28 61 views
0

我想打開另一個窗體的按鈕,它只是在開始時纔好。在幾個表單之後,發生了stackoverflow錯誤! 錯誤發生在窗體1,窗體2和窗體3上(我開始多次調試):代碼非常簡單。像形式3:System.StackOverflowException通過形式

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)

上述錯誤解決(using語句)現在的問題是,當我琬t將文本框中的值保存到訪問數據庫。代碼: 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(); 
     } 
    } 
} 

當我不想傳遞這些值時,它會顯示一個按鈕,表示按條件表達式中的數據類型存在錯誤。

+0

我想我們需要更多的細節來幫助你。你不能寫出導致這個錯誤的代碼的全部樣本嗎? – PierrOz 2010-04-28 08:59:43

+0

這意味着您在StackOverflow上提出了太多問題來開發您的應用程序。 :P 出於玩笑,你可以發佈一些更多的代碼?是否有任何遞歸涉及?是否Form5太創建其他Form5對象? – 2010-04-28 09:01:03

+0

tnx快速解答! upps。我的錯誤其實。錯誤發生在窗體1,窗體2和窗體3上(我開始多次調試):代碼非常簡單。 like for form 3: public partial class Form2:Form { Form3 obrok = new Form3(); public Form2() { InitializeComponent(); } 公共無效textBox1_TextChanged(對象發件人,EventArgs的) { } 私人無效的button1_Click(對象發件人,EventArgs的) { obrok.Show(); this.Hide(); }}} – simon 2010-04-28 09:12:39

回答

2

所以,Form2的情況下,當它構建了新的Form3,Form3情況下,一個新的Form5建設...也許Form5甚至實例另一種形式,其實例另一個等等?在我看來,你以某種方式聲明你的類,以便實例化其中的一個實際上實例化了很多其他表單對象,甚至可能還有一個循環引用(例如Form3 => Form5 => Form ??? => ... => Form3 => Form5 =>表??? => ...永遠),所以你困在無限循環中的表單的構造函數。

如果事情是這樣的話,如果可能的話你的程序邏輯,你應該在顯示它們的方法裏面移動你的表單聲明,如果被包含在using語句中,它應該更好:這樣,只有當它們是當他們不再使用時,它們就會被完全銷燬。

+0

是的,我現在用它,它很酷的TNX! – simon 2010-04-28 09:37:04

+0

很高興你解決了;如果我的猜測是正確的,不要忘記將這個答案標記爲已接受。 :) – 2010-04-28 09:38:57