VB程序空输入触发ArgumentOutOfRangeException,如何添加医保卡号输入提示?
嘿,我来帮你解决这个程序崩溃的问题!
你的代码之所以会触发ArgumentOutOfRangeException,是因为当文本框为空(或者输入内容长度不足12位)时,调用Substring方法根本找不到足够的字符去截取——空字符串连1个字符都没有,更别说要取4个了!
咱们只需要在执行字符串截取之前先做输入校验,提前拦住错误情况并给用户友好提示,就能彻底避免崩溃。下面是修改后的完整代码,我还额外加了格式合法性校验(确保前4位是字母、后8位是数字),让程序更严谨:
Dim numero As String 'Numéro d'assurance maladie Dim lettre As String 'Quatre premières lettres Dim chiffre1 As String 'Quatre premiers chiffres Dim chiffre2 As String 'Quatre derniers chiffres numero = txtNumero.Text.Trim() '先去掉前后空格,避免用户误输入空格影响判断 ' 第一步:校验输入是否为空 If String.IsNullOrEmpty(numero) Then MsgBox("请输入您的医保卡号!", MsgBoxStyle.Exclamation, "输入错误") txtNumero.Focus() '让光标回到输入框,方便用户直接输入 Exit Sub '直接退出当前过程,不执行后续代码 End If ' 第二步:校验总长度是否符合4字母+8数字的要求(总长度12位) If numero.Length <> 12 Then MsgBox("医保卡号格式错误!请输入4个字母加8位数字,例如:LANS10763985", MsgBoxStyle.Exclamation, "格式错误") txtNumero.Focus() Exit Sub End If ' 第三步:可选但更严谨的校验——确保前4位是字母,后8位是数字 Dim isFirstFourLetters As Boolean = True For i As Integer = 0 To 3 If Not Char.IsLetter(numero(i)) Then isFirstFourLetters = False Exit For End If Next Dim isLastEightDigits As Boolean = True For i As Integer = 4 To 11 If Not Char.IsDigit(numero(i)) Then isLastEightDigits = False Exit For End If Next If Not isFirstFourLetters Or Not isLastEightDigits Then MsgBox("医保卡号格式错误!前4位必须是字母,后8位必须是数字,例如:LANS10763985", MsgBoxStyle.Exclamation, "格式错误") txtNumero.Focus() Exit Sub End If ' 所有校验通过后,再安全地截取字符串 lettre = numero.Substring(0, 4) chiffre1 = numero.Substring(4, 4) chiffre2 = numero.Substring(8, 4) ' 这里可以继续编写你后续的业务逻辑
关键修改说明:
Trim()处理:避免用户不小心输入前后空格,导致长度判断出错- 分层校验逻辑:从空输入→长度错误→格式错误,一步步拦截问题,给用户明确的提示
- 提前退出流程:一旦发现错误,就用
Exit Sub终止当前过程,不会执行到后面会崩溃的截取代码
内容的提问来源于stack exchange,提问作者Stéphanie L'ange Renaud
相关产品推荐
相关产品推荐

