You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForm中第二个窗体仅显示半秒的解决咨询

问题:添加供应商窗体打开后立即关闭

我运行程序时,添加供应商的窗体仅打开半秒就关闭了。我是编程新手,刚接触C#,目标是实现一个带添加按钮的ListView,用于添加商品(Goods)和供应商(Suppliers)。

相关代码

MainForm.cs

namespace Supply_business.Forms
{
    public partial class MainForm : Form
    {
        public Contracts Contract;
        public MainForm()
        {
            Contract = new Contracts();
            InitializeComponent();
        }

        private void DisplayContent()
        {
            lsview2.Items.Clear();
            Contract.Goods.Sort();
            lsview1.Items.Clear();
            Contract.Suppliers.Sort();
            foreach (var supplier in Contract.Suppliers)
            {
                ListViewItem lvi = new ListViewItem(supplier.Name);
                lvi.SubItems.Add(supplier.Email);
                lvi.Tag = supplier;
                lsview1.Items.Add(lvi);
            }
            foreach (var good in Contract.Goods)
            {
                ListViewItem lvi = new ListViewItem(good.Name);
                lvi.SubItems.Add(good.Description);
                lvi.SubItems.Add(good.Price.ToString());
                lvi.SubItems.Add(good.Quantity.ToString());
                lvi.Tag = good;
                lsview2.Items.Add(lvi);
            }
        }

        private void AddBtn_Click(object sender, EventArgs e)
        {
            AddEditContract addEditContract = new AddEditContract();
            Good good = new Good();
            addEditContract.thisGood = good;

            if (addEditContract.ShowDialog() == DialogResult.OK)
            {
                Contract.Goods.Add(good);
                DisplayContent();
            }
        }

        private void AddBtn2_Click(object sender, EventArgs e)
        {
            AddEditSuppliercs addEditSuppliercs = new AddEditSuppliercs();
            Supplier supplier = new Supplier();
            addEditSuppliercs.thisSupplier = supplier;

            if (addEditSuppliercs.ShowDialog() == DialogResult.OK)
            {
                Contract.Suppliers.Add(supplier);
                DisplayContent();
            }
        }
    }
}

AddEditSuppliercs.cs

public partial class AddEditSuppliercs : Form
{
    public Supplier thisSupplier { get; set; }
    public AddEditSuppliercs()
    {
        InitializeComponent();
    }

    private void AddEditSuppliercs_Load(object sender, EventArgs e)
    {
        if (thisSupplier != null)
        {
            txtName.Text = thisSupplier.Name;
            txtEmail.Text = thisSupplier.Email;

            Close();
        }
    }

    private void Okbtn_Click(object sender, EventArgs e)
    {
        if (thisSupplier != null)
        {
            thisSupplier.Name = txtName.Text;
            thisSupplier.Email = txtEmail.Text;

            Close();
        }
    }
}

问题原因与修复方案

问题根源

窗体闪退的直接原因是AddEditSuppliercs_Load方法里的Close()调用:
当你点击添加供应商按钮时,主窗体会创建一个新的Supplier实例并赋值给addEditSuppliercs.thisSupplier,导致窗体加载时触发if (thisSupplier != null)分支,直接调用Close()关闭窗体。

修复步骤

  1. 移除加载事件里的关闭代码
    修改AddEditSuppliercs_Load方法,删除多余的Close(),这个方法的作用是编辑已有供应商时填充数据,添加场景下不需要关闭窗体:
private void AddEditSuppliercs_Load(object sender, EventArgs e)
{
    if (thisSupplier != null)
    {
        txtName.Text = thisSupplier.Name;
        txtEmail.Text = thisSupplier.Email;
        // 移除Close()调用
    }
}
  1. 设置确认按钮的DialogResult
    在Okbtn_Click方法里,关闭窗体前需要设置DialogResult.OK,这样主窗体才能识别用户是确认添加,进而执行后续的添加和刷新操作:
private void Okbtn_Click(object sender, EventArgs e)
{
    if (thisSupplier != null)
    {
        thisSupplier.Name = txtName.Text;
        thisSupplier.Email = txtEmail.Text;

        DialogResult = DialogResult.OK; // 添加此行
        Close();
    }
}
  1. 检查商品添加窗体
    同理,检查你的AddEditContract窗体是否存在同样的问题,确保添加商品时窗体也能正常工作。

修改完成后,点击添加供应商按钮,窗体就能正常打开,用户输入信息后点击确认,主窗体就会将新供应商添加到列表并刷新显示。

内容的提问来源于stack exchange,提问作者AlexArd21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 01:04:55