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()关闭窗体。
修复步骤
- 移除加载事件里的关闭代码
修改AddEditSuppliercs_Load方法,删除多余的Close(),这个方法的作用是编辑已有供应商时填充数据,添加场景下不需要关闭窗体:
private void AddEditSuppliercs_Load(object sender, EventArgs e) { if (thisSupplier != null) { txtName.Text = thisSupplier.Name; txtEmail.Text = thisSupplier.Email; // 移除Close()调用 } }
- 设置确认按钮的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(); } }
- 检查商品添加窗体
同理,检查你的AddEditContract窗体是否存在同样的问题,确保添加商品时窗体也能正常工作。
修改完成后,点击添加供应商按钮,窗体就能正常打开,用户输入信息后点击确认,主窗体就会将新供应商添加到列表并刷新显示。
内容的提问来源于stack exchange,提问作者AlexArd21
相关产品推荐
相关产品推荐

