2014-01-05 145 views
-1

所以我想要做的是創建一個主窗體,然後它會有不同的按鈕,將帶你到4種不同的形式。它以前工作,現在它不工作。例如我會有一個主要的形式,將帶你到皮卡表格,交貨表格和列表表格等 所以每個表格我寫代碼例如在主窗體我寫從另一個窗體打開窗體接收錯誤c#

private PickupForm pickupform = new PickupForm(); 
private DeliveryForm deliveryform = new DeliveryForm(); 

,爲pickupformdeliveryform我會寫

private MainForm mainform = new MainForm(); 

,但我似乎獲得錯誤,當我嘗試執行。 這是將顯示

類型「System.StackOverflowException」未處理的異常發生在coursework2.exe

和奇怪的是當我改變了前兩行的順序顯示的消息早,錯誤將會發生在哪一條線上。

所以這是所有的代碼

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

namespace coursework2 
{ 
    public partial class MainForm : Form 
    { 
     private DeliveryForm deliveryform = new DeliveryForm(); 
     private PickupForm pickupform = new PickupForm(); 

     public MainForm() 
     { 
      InitializeComponent(); 
     } 

     private void btnNpickup_Click(object sender, EventArgs e) 
     { 
      pickupform.ShowDialog(); 
     } 

     private void groupBox2_Enter(object sender, EventArgs e) 
     { 
     } 

     private void MainForm_Load(object sender, EventArgs e) 
     { 
     } 

     private void btnNdelivery_Click(object sender, EventArgs e) 
     { 
      this.Close(); 
      deliveryform.ShowDialog(); 
     } 
    } 
} 

回答

1

你正在創建一個無限循環。 (直到堆棧溢出)

每次創建MainForm時,都會創建一個DeliveryForm的新實例。然後在DeliveryForm中創建一個MainForm的新實例。然後...

如果您需要從DeliveryForm內引用主窗體,請將其設置爲屬性。 (和初始化爲null)

在PickupForm:

private MainForm mainform = null; 

public MainForm ParentForm 
{ 
    get { return mainform; } 
    set { mainform = value; } 
} 

在的MainForm:

private void btnNdelivery_Click(object sender, EventArgs e) 
{ 
    deliveryForm.ParentForm = this; 
    deliveryform.ShowDialog(); 
    this.Close(); 
} 
+0

謝謝你的幫助。現在,我可以從mainform導航到不同的形式..但我發現問題,當我試圖從拾取窗體使用返回按鈕並導航回到mainform – user1211911

+0

在ShowDialog()調用後刪除this.Close()。 –

+0

抱歉忽略了最後的評論..只是犯了一個愚蠢的錯誤 – user1211911

相關問題