如何处理textBox输入1-5数字时的格式校验与异常捕获问题
输入校验功能修正方案
现有代码存在的问题
int.Parse()放置在try代码块之外,用户输入非数字内容时解析抛出的异常无法被捕获,会直接导致程序崩溃- 异常捕获类型匹配错误:非数字输入、空输入、数值超出int范围对应的异常分别是
FormatException、ArgumentNullException、OverflowException,你声明捕获的NotFiniteNumberException无法覆盖上述常见非法输入场景 - 缺少持续校验逻辑,报错后未拦截后续流程,也没有引导用户重新输入的处理
修正后代码实现
推荐使用更安全的int.TryParse替代int.Parse+异常捕获的写法,以下是WinForm场景下满足需求的完整实现:
private void SubmitButton_Click(object sender, EventArgs e) { string inputContent = number.Text.Trim(); // 校验是否为合法int if (!int.TryParse(inputContent, out int validNumber)) { MessageBox.Show("请输入有效的数字", "输入错误", MessageBoxButtons.OK, MessageBoxIcon.Warning); // 自动聚焦输入框并选中已有内容,方便用户直接修改 number.Focus(); number.SelectAll(); return; } // 校验数值范围 if (validNumber < 1 || validNumber > 5) { MessageBox.Show("请输入1-5范围内的数字", "输入错误", MessageBoxButtons.OK, MessageBoxIcon.Warning); number.Focus(); number.SelectAll(); return; } // 校验通过,后续业务逻辑写在此处 MessageBox.Show($"输入合法,你输入的数字是:{validNumber}", "提示"); }
体验优化可选方案
可以通过拦截输入框按键事件,从源头禁止非数字字符输入,减少用户错误操作:
private void number_KeyPress(object sender, KeyPressEventArgs e) { // 仅允许输入数字和退格键 if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back) { e.Handled = true; } }
内容的提问来源于stack exchange,提问作者viktorka4
相关产品推荐
相关产品推荐

