none
Combobox com máscara de entrada RRS feed

  • Pergunta

  • Bom dia pessoal!

    Eu estou criando uma tela de cadastros e surgiu a necessidade de além de exibir os dados do banco para alguns campos, permitir a entrada de dados novos. Essa entrada de dados novos eu vou controlar para não ter conflito com os dados já existentes na tabela e permitir ou não a inserção no evento leave do componente. 

    Mas o problema está sendo a máscara de entrada, pois um dos campos é de telefone, por exemplo. Eu busco esses telefones na tabela de cadastros, que é gerenciada por uma tela onde uso o maskeditbox para fazer a entrada de dados. Mas na tela onde estou trabalhando hoje, eu uso o combobox para listar os telefones. 

    Eu estou tentando desenvolver uma máscara via código para simular o maskeditbox, mas não estou tendo sucesso. Alguém tem alguma sugestão?

    att.

    Giovani

    quarta-feira, 8 de abril de 2015 12:53

Respostas

  • Encontrei uma solução!

    Eu juntei 2 componentes sobrepostos.

    1 maskeditbox

    1 combobox

    E configurei a mascara para telefone fixo. Criei 2 eventos de código para escolher entre a máscara de telefone fixo ou telefone celular e resolveu o problema! Agora falta eu criar isso como um componente para usar como dll, sendo assim, não precisarei fazer essa adaptação toda vez que eu precisar.

    O componente visualmente ficou assim.

    E o código para escolher as máscaras ficou assim:

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
            'Escolhe a máscara ideal de acordo com o formato de telefone fixo ou de telefone de celular
            'Pelo evento de selecionar item do combobox
            If Me.ComboBox1.Items(Me.ComboBox1.SelectedIndex).ToString.Length = 13 Then
                Me.MaskedTextBox1.Mask = "(99)9999-9999"
            Else
                Me.MaskedTextBox1.Mask = "(99)99999-9999"
            End If
            Me.MaskedTextBox1.Text = Me.ComboBox1.Items(Me.ComboBox1.SelectedIndex).ToString
        End Sub
    
        Private Sub MaskedTextBox1_TextChanged(sender As Object, e As EventArgs) Handles MaskedTextBox1.TextChanged
            'Aqui escolhe a mascara de acordo com o caracter que define telefone celular.
            'Devem existir situações em que isso não funcione...mas a toque de caixa resolve o problema!
            If Me.MaskedTextBox1.Text.Substring(4, 1) = "9" Then
                Me.MaskedTextBox1.Mask = "(99)99999-9999"
            Else
                Me.MaskedTextBox1.Mask = "(99)9999-9999"
            End If
        End Sub

    Att.

    Giovani

    quarta-feira, 8 de abril de 2015 18:59

Todas as Respostas

  • Encontrei uma solução!

    Eu juntei 2 componentes sobrepostos.

    1 maskeditbox

    1 combobox

    E configurei a mascara para telefone fixo. Criei 2 eventos de código para escolher entre a máscara de telefone fixo ou telefone celular e resolveu o problema! Agora falta eu criar isso como um componente para usar como dll, sendo assim, não precisarei fazer essa adaptação toda vez que eu precisar.

    O componente visualmente ficou assim.

    E o código para escolher as máscaras ficou assim:

    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
            'Escolhe a máscara ideal de acordo com o formato de telefone fixo ou de telefone de celular
            'Pelo evento de selecionar item do combobox
            If Me.ComboBox1.Items(Me.ComboBox1.SelectedIndex).ToString.Length = 13 Then
                Me.MaskedTextBox1.Mask = "(99)9999-9999"
            Else
                Me.MaskedTextBox1.Mask = "(99)99999-9999"
            End If
            Me.MaskedTextBox1.Text = Me.ComboBox1.Items(Me.ComboBox1.SelectedIndex).ToString
        End Sub
    
        Private Sub MaskedTextBox1_TextChanged(sender As Object, e As EventArgs) Handles MaskedTextBox1.TextChanged
            'Aqui escolhe a mascara de acordo com o caracter que define telefone celular.
            'Devem existir situações em que isso não funcione...mas a toque de caixa resolve o problema!
            If Me.MaskedTextBox1.Text.Substring(4, 1) = "9" Then
                Me.MaskedTextBox1.Mask = "(99)99999-9999"
            Else
                Me.MaskedTextBox1.Mask = "(99)9999-9999"
            End If
        End Sub

    Att.

    Giovani

    quarta-feira, 8 de abril de 2015 18:59
  • Só para constatar, a minha gambiarra não é ideal e pesquisando na internet, eu encontrei esse material que resolve o problema de forma correta e elegante. Vou tentar aplicar ao meu problema.

    Att.

    Giovani

    sexta-feira, 10 de abril de 2015 17:37