从另一个表单打开表单收到错误c#

时间:2014-01-05 21:47:38

标签: c# forms error-handling

所以我要做的是创建一个主要表单,然后它将有不同的按钮,将带您到4种不同的形式。它以前工作,现在它不起作用。例如,我将有一个主要表格,将带您到皮卡表格,交付表格和清单表格等。 所以我写每个表格代码,例如我写的主要形式

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

对于pickupformdeliveryform,我会写

private MainForm mainform = new MainForm();

但是当我尝试执行时,我似乎得到了错误。 这是将显示的消息

  

coursework2.exe中出现未处理的“System.StackOverflowException”类型异常

奇怪的是,当我改变前面显示的前两行的顺序时,错误将发生在该行首先出现的位置。

所以这就是所有代码

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 个答案:

答案 0 :(得分: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();
}