none
只因為new一個Form,卻發生了常見的System.StackOverflowException RRS feed

  • 問題

  • 各位好

    今天在寫win form程式時,發生了這個問題:

    "類型 'System.StackOverflowException' 的未處理例外狀況發生於 System.Windows.Forms.dll"

    而爬了一些文,大都是因為發生了無窮迴圈而爆掉,而我的情況是這樣

     

    1. 首先有第一支程式Form.cs,假設叫MainForm(第一個Form)

        而這裡面有個共用函式

       public Boolean ReadCard(string recKind)
        {

            ..........

            .........

            return retReadCardFlag;

        }

     

     

    2. 再來有第二支程式Record.cs,假設叫RecordForm (第二個Form)

        我為了要在Record.cs裡,也能使用MainForm 裡的ReadCard函式

      所以,程式內容如下:

     

    Code Snippet

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace GuestDaily
    {
        public partial class RecordForm : Form
        {

          
    MainForm MainFun = new MainForm();-->


     

    /*
    我只要一加這行就會發生上述的

         Error,我跟本還沒開

         始呼叫函式MainFun.ReadCard("1")就

         已經有Error產生*/

     

            public RecordForm()
            {
                InitializeComponent();
            }

            private void RecordForm_Load(object sender, EventArgs e)
            {
               // Boolean a = false;
                //a=MainFun.ReadCard("1");

            }
        }
    } 

     

     

     

      

      而最後程式會停在另外一個Form的Design那一支(Form3.Design.cs)中

      private void InitializeComponent()

      {

         this.txt_money = new System.Windows.Forms.TextBox();---->停在這裡

      }       

     

      實在是不懂為何只是宣告一行,就會發生這樣的錯,不懂無窮迴圈是發生在何處

      而最後停在Form3.Design.cs,這支我根本沒動過,更是不理解會何會停在這裡

      不太懂Design那支run的流程,是否我造成了InitializeComponent()重複執行

      還請各位高手指點,且我該如何修正,因為我不想再把ReadCard()這個函式貼一遍

      我希望能直接引用,謝謝各位

    2008年11月27日 下午 01:33

解答

所有回覆

  • 老實說,我也不懂為什麼你不使用 static 來宣告共用函式。

    而且作為兩個表單都可以用的,應該是要另外使用一個類別來放 (ex: Global),除非那函式和 MainForm 有很強的相依性 ...

     

    2008年11月27日 下午 01:40
    版主
  •  

    你的MainForm裡面是否有宣告RecordForm?
    2008年11月28日 上午 03:46
  •  

    嗯,剛跟同事討論解決了

    您說得沒錯,我在MainForm 最外面就宣告了RecordForm ( RecordForm recForm = new RecordForm()Wink

    導致MainForm 初始化時,會再去中初始化RecordForm

    而RecordForm   初始化時,又再宣告MainForm

    我想無窮迴圈就是因為這個因素

     

    我把MainForm宣告的位置,改到某控制項的Click事件後,這個問題就暫時解決了

    沒有寫static是因為該函式內還有使用用其他Class的函式

    也許我一開始沒規劃很好

    所以目前先這樣寫

    謝謝各位

     

    2008年11月28日 上午 06:04