如何优化TextBox.Text多条件校验的冗长代码?
优化WinForms打印按钮的冗余校验代码
嘿,我太懂你这种写一堆重复校验逻辑的痛苦了!把每个文本框的非空判断、数字转换都堆在if条件里,不仅代码臃肿到看着头疼,以后要加新的校验项或者修改规则时,更是要改得手忙脚乱。下面给你几个实用的优化思路,让代码瞬间清爽好维护:
思路1:提取通用校验方法,复用逻辑
先把单个文本框的校验逻辑抽成独立方法,这样所有需要校验整数的文本框都能直接复用:
// 通用整数文本框校验方法:返回是否合法,同时输出转换后的整数 private bool ValidateIntegerInput(TextBox textBox, out int parsedValue) { parsedValue = 0; // 第一步:校验是否为空/空白字符 if (string.IsNullOrWhiteSpace(textBox.Text)) { // 可以给TextBox的Tag属性设置友好提示,比如"零件数量" MessageBox.Show($"请输入有效的{textBox.Tag ?? "数值"}"); textBox.Focus(); return false; } // 第二步:校验是否能转换为整数 if (!int.TryParse(textBox.Text, out parsedValue)) { MessageBox.Show($"{textBox.Tag ?? "该输入"}必须是有效的整数"); textBox.Focus(); return false; } // 还能按需加额外规则,比如数值必须大于0 if (parsedValue <= 0) { MessageBox.Show($"{textBox.Tag ?? "该数值"}必须大于0"); textBox.Focus(); return false; } return true; }
之后在打印按钮的点击事件里,只需要逐个调用这个方法就行,代码瞬间清爽:
private void btnPrint_Click(object sender, EventArgs e) { int nbPieces, nbLotTrempe; // 逐个校验,只要有一个不通过就直接返回,不执行后续逻辑 if (!ValidateIntegerInput(textBoxNbPieces, out nbPieces)) return; if (!ValidateIntegerInput(textBoxNbLotTrempe, out nbLotTrempe)) return; // 所有校验通过,放心执行打印逻辑 // ...你的打印代码写在这里... }
思路2:批量校验多个文本框(适合校验项多的场景)
如果要校验的文本框不止一两个,可以把它们放到集合里循环处理,避免重复写调用代码:
private void btnPrint_Click(object sender, EventArgs e) { // 把需要校验的文本框都放进数组里 var textBoxesToCheck = new[] { textBoxNbPieces, textBoxNbLotTrempe }; // 用字典存每个文本框对应的校验结果 var validatedValues = new Dictionary<TextBox, int>(); foreach (var tb in textBoxesToCheck) { int value; if (!ValidateIntegerInput(tb, out value)) { // 只要有一个校验失败,直接退出 return; } validatedValues.Add(tb, value); } // 从字典里取出校验后的数值 int nbPieces = validatedValues[textBoxNbPieces]; int nbLotTrempe = validatedValues[textBoxNbLotTrempe]; // 执行打印逻辑 // ... }
额外小技巧
给你的TextBox控件设置Tag属性(比如在设计器里把textBoxNbPieces的Tag设为"零件数量"),这样弹出提示时用户能清楚知道哪个输入有问题,体验更好~
内容的提问来源于stack exchange,提问作者A. Petit
相关产品推荐
相关产品推荐

