VB中TxtCNPJ失焦时格式化14位CNPJ异常,求非MaskedBox方案
解决CNPJ格式设置问题
我来帮你搞定这个格式问题!你现在的困扰是想把14位字符转换成10.257.938/0001.45的样式,但当前LostFocus事件代码执行后,显示的却是.###.###/####-,而且你不想用MaskedBox控件对吧?
先看看你代码里的核心问题:
- 14位CNPJ对应的Format格式字符串写错了!你写的
"##.###.###/##..."完全不符合需求,正确的格式应该是"##.###.###/####.##",才能匹配XX.XXX.XXX/XXXX.XX的结构。 - 另外,没有处理输入中的非数字字符,万一用户不小心输入了符号或字母,Format函数很容易出现格式错乱的情况。
给你修正后的完整LostFocus事件代码:
Private Sub txtcnpj_LostFocus(sender As Object, e As EventArgs) Handles txtcnpj.LostFocus ' 先过滤掉所有非数字字符,确保只处理纯数字内容 Dim cleanText As String = String.Join("", txtcnpj.Text.Where(Function(c) Char.IsDigit(c))) If cleanText.Length > 0 Then Select Case cleanText.Length Case 11 ' 处理CPF格式 txtcnpj.Text = Format(cleanText, "###.###.###-##") Case 14 ' 处理CNPJ格式 txtcnpj.Text = Format(cleanText, "##.###.###/####.##") Case Else ' 长度不符合11或14时,这里默认保留纯数字内容,你可以改成提示用户输入错误 txtcnpj.Text = cleanText End Select End If End Sub
额外说明:
- 新增的过滤逻辑:自动剔除输入中的非数字字符,避免Format函数因为无效字符出现异常或格式错误。
- 修正后的格式字符串:14位数字会被正确转换成你想要的
XX.XXX.XXX/XXXX.XX样式,比如输入10257938000145,失去焦点后就会变成10.257.938/0001.45。 - 新增的Else分支:处理长度不符合11或14的情况,避免出现奇怪的格式,你可以根据需求改成弹窗提示用户输入长度错误。
内容的提问来源于stack exchange,提问作者Perroni
相关产品推荐
相关产品推荐

