none
Como fazer formatação de valores decimais?? RRS feed

  • Pergunta

  • Bom Dia, estou tendo uma dificuldade na formatação de valores decimais nas caixas, estou utilizando as *MaskedTextBox* e aplicando a mascara de acordo com a quantidade de números informados, mas em alguns casos não esta dando muito certo. Alguém poderia me ajudar de como fazer a formatação das mesmas? Segue o código abaixo que eu fiz para fazer tal,

     private void txtLimiteCredito_G_Leave(object sender, EventArgs e)
            {

                if (this.ControleLimiteCredito == false)
                {

                    if (txtLimiteCredito_G.Text.Length == 4)
                    {
                        txtLimiteCredito_G.Mask = "00,00";
                        this.ControleLimiteCredito = true;
                        return;
                    }
                    if (txtLimiteCredito_G.Text.Length == 5)
                    {
                        txtLimiteCredito_G.Mask = "000,00";
                        this.ControleLimiteCredito = true;
                        return;
                    }
                    if (txtLimiteCredito_G.Text.Length == 6)
                    {
                        txtLimiteCredito_G.Mask = "0000,00";
                        this.ControleLimiteCredito = true;
                        return;
                    }
                    if (txtLimiteCredito_G.Text.Length == 7)
                    {
                        txtLimiteCredito_G.Mask = "00.000,00";
                        this.ControleLimiteCredito = true;
                        return;
                    }
                    if (txtLimiteCredito_G.Text.Length == 8)
                    {
                        txtLimiteCredito_G.Mask = "000.00,00";
                        this.ControleLimiteCredito = true;
                        return;
                    }
                    if (txtLimiteCredito_G.Text.Length > 9)
                    {
                        ExibirMensagemAlerta("VALOR INVALIDO");
                        txtLimiteCredito_G.Clear();
                        txtLimiteCredito_G.Mask = "";
                        this.ControleLimiteCredito = false;
                        return;
                    }
                }
                
            }

    quarta-feira, 3 de maio de 2017 11:01

Respostas

  • Desta forma que sugeri ele necessita que o usuário digite os zeros para que 100 se torne 100,00, mas o usuário não precisa digitar os separadores.

    Ah, tente incluindo este código também:

    txtLimiteCredito_G.RightToLeft = RightToLeft.Yes
    txtLimiteCredito_G.TextAlign = HorizontalAlignment.Right

    Se fizer questão do usuário poder aplicar apenas a parte decimal e só depois de tirar o foco do campo acrescentar as casas decimais, aí realmente terá que tratar isto na mão.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quarta-feira, 3 de maio de 2017 13:56

Todas as Respostas

  • Leandro,

    Você pode definir uma única máscara sem verificar o tamanho e definir também a cultura para que utilize o separador correto para decimal e milhares.

    txtLimiteCredito_G.Mask = "999.990,00"; // O 9 indica um dígito opcional, já o 0 é obrigatório
    txtLimiteCredito_G.FormatProvider = CultureInfo.GetCultureInfo("pt-BR").NumberFormat;


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quarta-feira, 3 de maio de 2017 11:28
  • Obrigado Juliano, mas poderia verificar se usei corretamente,  pois ficou dessa forma na aplicação. 

    Usei da seguinte forma:

       private void txtLimiteCredito_G_Leave(object sender, EventArgs e)
            {
                txtLimiteCredito_G.Mask = "999.990,00";
                txtLimiteCredito_G.FormatProvider = CultureInfo.GetCultureInfo("pt-BR").NumberFormat;
            }

    quarta-feira, 3 de maio de 2017 13:21
  • Você deve colocar o código abaixo no Load do Form e não no Leave do MaskedTextBox.

    txtLimiteCredito_G.Mask = "999.990,00";
    txtLimiteCredito_G.FormatProvider = CultureInfo.GetCultureInfo("pt-BR").NumberFormat;


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quarta-feira, 3 de maio de 2017 13:25
  • Certo, Obrigado! Mas a forma que eu estava procurando de fazer, é assim: Quando digitar o valor 100 a caixa automaticamente já formata para 100,00.  Tem com  fazer isso? poderia me orientar? 

     

    é dessa forma que me orientou acima? Pois na aplicação se comportou do mesmo jeito.

    private void FrmCadGeral_Load(object sender, EventArgs e)
            {
                txtLimiteCredito_G.Mask = "999.990,00";
                txtLimiteCredito_G.FormatProvider = CultureInfo.GetCultureInfo("pt-BR").NumberFormat;
            }



    quarta-feira, 3 de maio de 2017 13:41
  • Desta forma que sugeri ele necessita que o usuário digite os zeros para que 100 se torne 100,00, mas o usuário não precisa digitar os separadores.

    Ah, tente incluindo este código também:

    txtLimiteCredito_G.RightToLeft = RightToLeft.Yes
    txtLimiteCredito_G.TextAlign = HorizontalAlignment.Right

    Se fizer questão do usuário poder aplicar apenas a parte decimal e só depois de tirar o foco do campo acrescentar as casas decimais, aí realmente terá que tratar isto na mão.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quarta-feira, 3 de maio de 2017 13:56
  • Muito Obrigado Juliano, junto com esse código que me passou, mais um outro post que achei, deu certinho o que eu queria muito obrigado pela atenção. Tenha um ótimo Dia.
    quarta-feira, 3 de maio de 2017 14:04
  • Excelente, Leandro.

    Igualmente.


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    quarta-feira, 3 de maio de 2017 15:07