【问题标题】:open form from another form recieve error c#从另一个表单打开表单收到错误 c#
【发布时间】:2014-01-05 21:47:38
【问题描述】:

所以我要做的是创建一个主表单,然后它将有不同的按钮,将您带到 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();
        }
    }
}

【问题讨论】:

    标签: c# forms error-handling


    【解决方案1】:

    您正在创建一个无限循环。 (直到你得到堆栈溢出)

    每次创建 MainForm 时都会创建 DeliveryForm 的新实例。然后在 DeliveryForm 中创建一个 MainForm 的新实例。那么……

    如果您需要从 DeliveryForm 中引用主表单,请将其设置为属性。 (并将其初始化为null)

    在 PickupForm 中:

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

    在主窗体中:

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

    【讨论】:

    • 感谢您的帮助。现在我可以从主窗体导航到不同的窗体.. 但是当我尝试使用拾取窗体中的返回按钮并导航回主窗体时发现问题
    • 在 ShowDialog() 调用后删除 this.Close()。
    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 2020-08-04
    • 2015-08-12
    • 1970-01-01
    • 2011-04-27
    • 2020-03-14
    • 2011-06-25
    • 1970-01-01
    相关资源
    最近更新 更多