所以我要做的是创建一个主要表单,然后它将有不同的按钮,将带您到4种不同的形式。它以前工作,现在它不起作用。例如,我将有一个主要表格,将带您到皮卡表格,交付表格和清单表格等。 所以我写每个表格代码,例如我写的主要形式
private PickupForm pickupform = new PickupForm();
private DeliveryForm deliveryform = new DeliveryForm();
对于pickupform
和deliveryform
,我会写
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();
}
}
}
答案 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();
}