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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:37:33