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

如何处理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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:36:10