none
Mascara dinâmica para placa - C# RRS feed

  • Discussão Geral

  • Bom dia pessoal, 

    Gostaria de saber se vocês poderia me ajudar a criar uma máscara dinâmica em C# para receber o valor de uma placa de veículo por exemplo WWW-9999 no caso eu faço a criação das minhas máscara conforme esse exemplo Exemplo (Créditos Wagner Braz Rodrigues) ao qual eu realizei apenas algumas alterações para usar em campos como telefone e celular. Daí gostaria de saber se eu consigo fazer uma máscara do gênero usando essa ideia. Segue um exemplo do uso da máscara de CPF.

    //Criado do Wagner Braz Rodrigues
    //Data 23/09/2010
    
    private void AjustaMascaraCPF()
            {
                int cont = 0;
                int cursorPos = SelectionStart;
     
                foreach (Char c in Text)
                {
                    if (((cont == 3) || (cont == 7)) && (c != '.') && (Text.Length >= cont))
                    {
                        Text = Text.Insert(cont,".");
                        SelectionStart = cursorPos + 1;
                    }
                    if ( (c == '.') && (Text.Length >= cont) && (cont != 3) && (cont != 7) )
                    {
                        Text = Text.Remove(cont,1);
                        SelectionStart = cursorPos;
                    }
     
                    if ( (cont == 11) && (c != '-') && (Text.Length >= cont))
                    {
                        Text = Text.Insert(11, "-");
                        SelectionStart = cursorPos + 1;
                    }
                    if ((c == '-') && (cont != 11) && (Text.Length >= cont))
                    {
                        Text = Text.Remove(cont,1);
                        SelectionStart = cursorPos;
                    }
     
                        cont++;
                }
            }

    private void textBox1_KeyUp(object sender, KeyEventArgs e)
    {
        AjustaMascaraCPF();
    }
    
    //Aceitar apenas números no caso do CPF
    private void textBox1_KeyPress(object sender, KeyEventArgs e)
    {
        if ((!Char.IsDigit(e.KeyChar)) && (e.KeyChar != '\x0008'))
                {
                    e.KeyChar = '\x0000';
                }     
    }
    

    • Tipo Alterado Marcos SJ sexta-feira, 4 de dezembro de 2015 14:23 Todas as threads de "How to" serão movidas para discussão geral
    sexta-feira, 4 de dezembro de 2015 11:50

Todas as Respostas

  • Olá, vi que você esta utilizando o windows forms, 

    você pode utilizar o componente "MaskedTextBox" (link)



    Microsoft Innovation Center - Mic - Curitba

    sexta-feira, 4 de dezembro de 2015 15:10
  • Sim Douglas estou usando Windows Form, pensei no componente MaskedTextBox porém gostaria de saber se não consigo fazer isso através do exemplo acima pois resultado fica bem melhor.
    sexta-feira, 4 de dezembro de 2015 15:30
  • Então se fosse o MaskedTextBox acho que daria para resolver somente adicionando a mascara "LLL-0000";

    Deste jeito que tu quer fazer, acredito que o algoritmo seria algo como:

    Terá que validar se os primeiros três dígitos são caracteres alfanuméricos (a-z), depois adicionar o hífen e posteriormente deixar adicionar somente números; Correto?

    Se for isso, me avisa que eu escrevo um exemplo em C# utilizando regex


    Microsoft Innovation Center - Mic - Curitba

    sexta-feira, 4 de dezembro de 2015 16:10
  • Sim Douglas é exatamente isso que eu preciso aceitar que os primeiros 3 caracteres sejam letras depois adicionar o hífen e aceitar 4 números...
    sexta-feira, 4 de dezembro de 2015 16:42
  • Voce precisa verificar os 3 primeiros char permitindo somente letras, verificar se o 4° char não for '-' incluir '-', apos isso permitir apenas numeros e bloquear após = 8° char. Adapte o ex. abaixo conforme nescessario.

            private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
            {
                int cursorPos = textBox2.SelectionStart;
                if (Char.IsLetterOrDigit(e.KeyChar) || e.KeyChar == '-')
                {
                    if (cursorPos < 3 && !Char.IsLetter(e.KeyChar))
                    {
                        e.Handled = true;
                    }
                    else if (cursorPos == 3 && e.KeyChar != '-')
                    {
                        textBox2.Text = textBox2.Text.Insert(cursorPos, "-");
                        textBox2.SelectionStart = cursorPos + 1;
                        if (!Char.IsDigit(e.KeyChar))
                        {
                            e.Handled = true;
                        }
                    }
                    else if (cursorPos > 3 && !Char.IsDigit(e.KeyChar))
                    {
                        e.Handled = true;
                    }
                    else if (cursorPos == 8)
                    {
                        e.Handled = true;
                    }
                }
            }


    sexta-feira, 4 de dezembro de 2015 20:42
  • Perfeito, funcionou exatamente como eu esperava. Valeu Ngo jl
    segunda-feira, 7 de dezembro de 2015 15:44