1
resposta

Mascara para valores decimais

Existe alguma mascara ou componente nativo para permitir a entrada de valores decimais. A mascara monetária mostrada nesse curso não me parece muito legal pois $ 000,000,000.00 te obriga a ficar navegando com as setas e ir ao ponto desejado e mesmo assim ficam espaços vazios à esquerda. Se eu digitar apenas 1,12, exibe [R$ . . . 1,12]. Gostaria de digitar, por exemplo, 1,12, ou 1200,00 e ao sair, resultasse em R$ 1,12 e R$ 1.200,00 respectivamewnte. Obrigado

1 resposta

Fala Ricardo, eu tive essa mesma dúvida e fui pesquisar. A informação que obtive é que não é possível fazer uma predefinição da mascara para vários tamanhos de texto diferentes. Terá que fazer o tratamento via código mesmo.

Eu fiz um código de exemplo para você testar. Usei o evento validating da MaskedTextbox1. Reescreva esse código dentro de uma MaskedTextbox para você ver o funcionamento. O código está comentado, qualquer dúvida é só perguntar. Não é um código definitivo, mas já te dá um ideia de tratamento da máscara.

        private void maskedTextBox1_Validating(object sender, CancelEventArgs e)
        {
            //Declaração das variáveis
            string aux = maskedTextBox1.Text;
            string EndMask = "";
            string StartMask = "";
            int tam = maskedTextBox1.Text.Length;

            //Verifica se foi preenchido com casa decimais (se houve ocorrência do uso da virgula)
            if (maskedTextBox1.Text.IndexOf(',') >= 0)
            {
                /*Posição relativa da vírgula dentro da string
                 *Escreve a parte inteira da máscara.
                 *Por exemplo: 1234,65. A vírgula destá na 4° posição logo, o i vai ser 4,3,2 e 1 (4 repetições de loop)*/
                int i = maskedTextBox1.Text.IndexOf(',');
                while (i > 0)
                {
                    StartMask += Convert.ToString(0);
                    i--;
                }

                /*Escreve a parte decimal da máscara.
                 *No caso do exemplo anterior, o tamanho da string é 7. Logo, o valor inicial de i vair ser (7-4)-1=2.
                 *Duas casas decimais*/
                i = (tam - maskedTextBox1.Text.IndexOf(',')) - 1;
                while (i > 0)
                {
                    EndMask += Convert.ToString(0);
                    i--;
                }
            }
            //Define a Máscara
            maskedTextBox1.Mask = "$" + StartMask + ","+ EndMask;

            //Reescreve o texto, quando se reescreve a máscara o texto apaga
            maskedTextBox1.Text = aux;
        }