【问题标题】:Mask textbox multiple masks掩码文本框多个掩码
【发布时间】:2019-08-10 23:56:11
【问题描述】:

有 4 个选项可以为我的应用程序输入电话号码

  1. 0000-0000
  2. 00000-0000
  3. (00)0000-0000
  4. (00)00000-0000

我正在使用“Maskedtextbox”来处理这个,我正在使用这个代码:

Private Sub TB_Telefone_11_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TB_Telefone_11.KeyPress

        ' Format when lenght = 8     >     0000-0000

        If TB_Telefone_11.Text.Length = 8 Then
            TB_Telefone_11.Mask = "0000-0000"
            TB_Telefone_11.SelectionStart = Len(TB_Telefone_11.Text)

        ' Formart when lenght = 9     >     00000-0000

        ElseIf TB_Telefone_11.Text.Length = 9 Then
            TB_Telefone_11.Mask = "00000-0000"
            TB_Telefone_11.SelectionStart = Len(TB_Telefone_11.Text)

        ' Format when lenght = 10     >     (00)0000-0000

        ElseIf TB_Telefone_11.Text.Length = 10 Then
            TB_Telefone_11.Mask = "(00)0000-0000"
            TB_Telefone_11.SelectionStart = Len(TB_Telefone_11.Text)

        ' Format when lenght = 11     >     (00)00000-0000

        ElseIf TB_Telefone_11.Text.Length = 11 Then
            TB_Telefone_11.Mask = "(00)00000-0000"
            TB_Telefone_11.SelectionStart = Len(TB_Telefone_11.Text)
        End If

    End Sub

问题是文本为空时,返回大小为10,这是因为为空时,返回:

' Size of 10 with spaces and etc.
(  )    -

当您插入数字时,它可以正常工作,但是当您开始擦除时,它会在 text.lenght = 10 中停止并保留该掩码。

【问题讨论】:

    标签: vb.net maskedtextbox


    【解决方案1】:

    请改用TextChanged 事件。另外,添加文本长度小于8的情况,将掩码重置为空字符串。

        Private Sub TB_Telefone_11_TextChanged(sender As Object, e As EventArgs) Handles TB_Telefone_11.TextChanged
    
            ' Format when lenght = 8     >     0000-0000
    
            If TB_Telefone_11.Text.Length = 8 Then
                TB_Telefone_11.Mask = "0000-0000"
                TB_Telefone_11.SelectionStart = Len(TB_Telefone_11.Text)
    
                ' Formart when lenght = 9     >     00000-0000
    
            ElseIf TB_Telefone_11.Text.Length = 9 Then
                TB_Telefone_11.Mask = "00000-0000"
                TB_Telefone_11.SelectionStart = Len(TB_Telefone_11.Text)
    
                ' Format when lenght = 10     >     (00)0000-0000
    
            ElseIf TB_Telefone_11.Text.Length = 10 Then
                TB_Telefone_11.Mask = "(00)0000-0000"
                TB_Telefone_11.SelectionStart = Len(TB_Telefone_11.Text)
    
                ' Format when lenght = 11     >     (00)00000-0000
    
            ElseIf TB_Telefone_11.Text.Length = 11 Then
                TB_Telefone_11.Mask = "(00)00000-0000"
                TB_Telefone_11.SelectionStart = Len(TB_Telefone_11.Text)
    
            ElseIf TB_Telefone_11.Text.Length < 8 Then
                TB_Telefone_11.Mask = ""
                TB_Telefone_11.SelectionStart = Len(TB_Telefone_11.Text)
    
            End If
    
        End Sub
    
    

    【讨论】:

    • 我试过了,但是文本格式不正确。
    • 当你输入时,它可以正常工作,但当你删除它时,由于文本长度,它不起作用。
    • @Heitor Badotti - 恐怕你的代码永远无法与 Mask 一起使用。假设设置了长度为 8 的掩码。用户将无法再输入任何字符,因此无法获得更长的掩码。当前代码或多或少可以工作,因为它没有考虑特殊的掩码字符
    猜你喜欢
    • 2011-01-16
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 2022-06-10
    • 2011-03-21
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多