C# WinForm修复单选按钮未选中点击保存不弹提示框问题
问题根因
你的遍历校验逻辑有两个核心错误:
- 遍历控件时只要遇到第一个非RadioButton类型的控件(比如分组框内的标签、说明文本等),就会进入else分支赋值"0"后直接break终止循环,根本不会遍历完所有单选按钮
- 没有在全量遍历完成后判断是否存在选中项,也没有配置未选中时的弹窗拦截逻辑
修正方案
把原有foreach段的代码替换为如下逻辑即可:
private void btnSimpan_Click(object sender, EventArgs e) { try { DataPembeli p = new DataPembeli(); p.Pembeli = txtPembeli.Text; p.AlamatKirim = txtAlamat.Text; p.Kuantitas = (int)kuantitasItem.Value; p.TglPesan = dtTglPesanan.Value; p.HasAsuransi = chkAsuransi.Checked; p.ItemOrdered= cmbItem.Text; bool hasSelectedMethod = false; foreach (Control c in grpbxMetodePengiriman.Controls) { // 仅处理单选按钮,其他类型控件直接跳过 if (c is RadioButton rb && rb.Checked) { p.MetodePengiriman = rb.Text; hasSelectedMethod = true; break; } } // 未选中时弹出提示,拦截后续保存逻辑 if (!hasSelectedMethod) { MessageBox.Show("请先选择配送方式", "操作提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // 后续编写你的数据保存逻辑即可 // ... } catch (Exception ex) { MessageBox.Show($"保存失败:{ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
补充说明
- 如果你的RadioButton不是直接放在
grpbxMetodePengiriman下,而是嵌套在分组框内的Panel、GroupBox等子容器中,需要写递归方法遍历所有层级的控件,否则会找不到嵌套的单选按钮 - 校验逻辑放在所有赋值操作之后、保存逻辑之前,未通过校验直接return,不会执行后续的数据库/文件保存操作,符合常规表单校验的交互逻辑
内容的提问来源于stack exchange,提问作者Dewa Samudra
相关产品推荐
相关产品推荐

