none
Formatando textbox em formata moeda

    Question

  • Ola amigos mais uma vez hoje preciso de ajuda, estou com um problema a resolver,,, preciso que um textbox ao digitar ele vai preenchendo da direita para esquerda e formatando o campo em moeda,,, exemplo 32,50 --- ,32>>>3,25>>>32,50. igual em caixas 24h do bradesco. procurei na google e nada de achar... Obrigado mais uma vez.
    Thursday, February 25, 2010 8:05 PM

Answers

  • Oi Fabiano,

    Espero que isso te ajude como me ajudou.

     private void FormatarValorMoeda(KeyEventArgs e, TextBox campo)
            {
                int KeyCode = e.KeyValue;

                if (!IsNumeric(KeyCode))
                {
                    e.Handled = true;
                    return;
                }
                else
                {
                    e.Handled = true;
                }

                switch (e.KeyCode)
                {
                    case Keys.NumPad0:
                        KeyCode = (int)Keys.D0;
                        break;
                    case Keys.NumPad1:
                        KeyCode = (int)Keys.D1;
                        break;
                    case Keys.NumPad2:
                        KeyCode = (int)Keys.D2;
                        break;
                    case Keys.NumPad3:
                        KeyCode = (int)Keys.D3;
                        break;
                    case Keys.NumPad4:
                        KeyCode = (int)Keys.D4;
                        break;
                    case Keys.NumPad5:
                        KeyCode = (int)Keys.D5;
                        break;
                    case Keys.NumPad6:
                        KeyCode = (int)Keys.D6;
                        break;
                    case Keys.NumPad7:
                        KeyCode = (int)Keys.D7;
                        break;
                    case Keys.NumPad8:
                        KeyCode = (int)Keys.D8;
                        break;
                    case Keys.NumPad9:
                        KeyCode = (int)Keys.D9;
                        break;
                }

               
                if (((e.KeyCode == Keys.Delete) || (e.KeyCode == Keys.Back)) && (str.Length > 0))
                {
                    str = str.Substring(0, str.Length - 1);
                }
                else if (!((e.KeyCode == Keys.Delete) || (e.KeyCode == Keys.Back)))
                {
                    str = str + Convert.ToChar(KeyCode);
                }
                if (str.Length == 0)
                {
                    campo.Text = "";
                }           

                if (str.Length == 1)
                {               
                    campo.Text = "0,0" + str;                              
                }
                else if (str.Length == 2)
                {              
                    campo.Text = "0," + str;
                }
                else if (str.Length > 2 && str.Length <= qtde)
                {              
                    campo.Text = str.Substring(0, str.Length - 2) + "," + str.Substring(str.Length - 2);        
                }
            }


     

    private void txtPrecoAcessorio_KeyDown(object sender, KeyEventArgs e)

    {
             FormatarValorMoeda(e, txtPrecoAcessorio);

    }

     

    private void txtPrecoAcessorio_KeyPress(object sender, KeyPressEventArgs e)

    {

             e.Handled =

    true;

    }


    Qualquer coisa me avise

    Fernanda Sallai
    http://www.fernandasallai.com/

    • Marked as answer by FabianoRod Saturday, March 06, 2010 4:22 PM
    Thursday, March 04, 2010 1:21 AM

All replies

  • os exemplos de currency textbox nao te atendem?


    Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/
    Thursday, February 25, 2010 8:45 PM
  • Ola amigos mais uma vez hoje preciso de ajuda, estou com um problema a resolver,,, preciso que um textbox ao digitar ele vai preenchendo da direita para esquerda e formatando o campo em moeda,,, exemplo 32,50 --- ,32>>>3,25>>>32,50. igual em caixas 24h do bradesco. procurei na google e nada de achar... Obrigado mais uma vez.

    Se entendi bem, na caixa de texo tem uma propiedade que diz--align, escolhe "right"...

    com isto passas a digitar apartir da direita...
    Just Be Humble Malange!
    Friday, February 26, 2010 9:07 PM
  • javascript!!! são mascaras de formatação... ou então procura no toolkit do VS que tem uns textbox lá que são componentes prontos(não gosto, mais pode te ajudar)

    abraço,
    Leonardo B. Moreira - Web Developer .net with asp.net and C# - I know, it is only programming but I like it.
    Sunday, February 28, 2010 4:06 AM
  • Bom dia Fabiano!

    Você não deixou claro se usa windows ou webforms, caso esteja usando webforms basta adicionar o css direction no estilo do TextBox, veja:

    <asp:TextBox ID="TextBox2" runat="server" style="direction:rtl"></asp:TextBox>
    A direção rtl (Right To Left) indica que a orientação do texto será da direita para esquerda.
    • Proposed as answer by Harley AraujoOwner Tuesday, March 02, 2010 10:54 AM
    • Unproposed as answer by FabianoRod Tuesday, March 02, 2010 7:02 PM
    Tuesday, March 02, 2010 10:54 AM
  • Ola pessoal eu uso Windows, e ainda não encontrei uma forma de resolver este problema... Obrigado a todos.
    Tuesday, March 02, 2010 7:02 PM
  • Oi Fabiano,

    Espero que isso te ajude como me ajudou.

     private void FormatarValorMoeda(KeyEventArgs e, TextBox campo)
            {
                int KeyCode = e.KeyValue;

                if (!IsNumeric(KeyCode))
                {
                    e.Handled = true;
                    return;
                }
                else
                {
                    e.Handled = true;
                }

                switch (e.KeyCode)
                {
                    case Keys.NumPad0:
                        KeyCode = (int)Keys.D0;
                        break;
                    case Keys.NumPad1:
                        KeyCode = (int)Keys.D1;
                        break;
                    case Keys.NumPad2:
                        KeyCode = (int)Keys.D2;
                        break;
                    case Keys.NumPad3:
                        KeyCode = (int)Keys.D3;
                        break;
                    case Keys.NumPad4:
                        KeyCode = (int)Keys.D4;
                        break;
                    case Keys.NumPad5:
                        KeyCode = (int)Keys.D5;
                        break;
                    case Keys.NumPad6:
                        KeyCode = (int)Keys.D6;
                        break;
                    case Keys.NumPad7:
                        KeyCode = (int)Keys.D7;
                        break;
                    case Keys.NumPad8:
                        KeyCode = (int)Keys.D8;
                        break;
                    case Keys.NumPad9:
                        KeyCode = (int)Keys.D9;
                        break;
                }

               
                if (((e.KeyCode == Keys.Delete) || (e.KeyCode == Keys.Back)) && (str.Length > 0))
                {
                    str = str.Substring(0, str.Length - 1);
                }
                else if (!((e.KeyCode == Keys.Delete) || (e.KeyCode == Keys.Back)))
                {
                    str = str + Convert.ToChar(KeyCode);
                }
                if (str.Length == 0)
                {
                    campo.Text = "";
                }           

                if (str.Length == 1)
                {               
                    campo.Text = "0,0" + str;                              
                }
                else if (str.Length == 2)
                {              
                    campo.Text = "0," + str;
                }
                else if (str.Length > 2 && str.Length <= qtde)
                {              
                    campo.Text = str.Substring(0, str.Length - 2) + "," + str.Substring(str.Length - 2);        
                }
            }


     

    private void txtPrecoAcessorio_KeyDown(object sender, KeyEventArgs e)

    {
             FormatarValorMoeda(e, txtPrecoAcessorio);

    }

     

    private void txtPrecoAcessorio_KeyPress(object sender, KeyPressEventArgs e)

    {

             e.Handled =

    true;

    }


    Qualquer coisa me avise

    Fernanda Sallai
    http://www.fernandasallai.com/

    • Marked as answer by FabianoRod Saturday, March 06, 2010 4:22 PM
    Thursday, March 04, 2010 1:21 AM
  • Fernanda, bom dia!!!
    Valeu pela ajuda a tempo estou procurando por isso, esta dando um erro na seguinte linha..
     if (!IsNumeric(KeyCode))
    (str.Length >
    Em str tambem esta dando este erro.

    Error 1 The name 'IsNumeric' does not exist in the current context 

    Muito Obrigado pela ajuda...
    • Edited by FabianoRod Thursday, March 04, 2010 5:37 AM faltou informações.
    Thursday, March 04, 2010 5:35 AM
  • Fabiano, troca o IsNumeric(KeyCode) por char.IsNumber(KeyCode).
    Thursday, March 04, 2010 11:18 AM
  • Oi Fabiano

    Me desculpe esqueci de incluir o método IsNumeric

     private bool IsNumeric(int Val)
            {
                return ((Val >= 48 && Val <= 57) || (Val >= 96 && Val <= 105) || (Val == 8) || (Val == 46));
            }

    E cria uma variavel global:


    String str = string.Empty; 

    E no evento enter do textBox linhe a variável

     private void txtPrecoAcessorio_Enter(object sender, EventArgs e)
            {
                str = String.Empty;
            }


    Acho que isso resolver os problemas.

    Fernanda Sallai
    http://www.fernandasallai.com/
    Thursday, March 04, 2010 12:09 PM
  • Oi Fernanda, quase deu cerrto esta dando erro na linha.

    else if (str.Length > 2 && str.Length <= qtde)
    Error 1 The name 'qtde' does not exist in the current context


    Obrigado!!!
    Thursday, March 04, 2010 2:55 PM
  • Ops...

    No lugar desse qtde coloque o total de casas que terá....


    Veja se resolve.

    E me avisa

    Fernanda Sallai
    http://www.fernandasallai.com/

    Thursday, March 04, 2010 3:08 PM
  • Oi Fernanda, agora foi sem erro mas na hora que vou digitar so muda a 1 casa do centavos, fica assim 0,01  se continuo digitando so muda onde esta o 1...

    Obrigado!
    Thursday, March 04, 2010 3:20 PM
  • Fabiano

    Era para funcionar...

    Vc colocou a quantidade total certa?

    Faz o seguinte me manda um email

    fernanda.sallai@codificando.net

    Ai conversamos melhor...

    Thursday, March 04, 2010 4:26 PM
  • Veja se é isso que está procurando:

           bool codeUpdating = false;

            public Form1()
            {
                InitializeComponent();
                textBox1.TextAlign = HorizontalAlignment.Right;
            }

            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!char.IsNumber(e.KeyChar) && !char.IsControl(e.KeyChar))
                    e.Handled = true;

                codeUpdating = false;
            }

            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                if (textBox1.Text.Length > 2)
                {
                    if (!codeUpdating)
                    {
                        codeUpdating = true;
                        int indexVirg = textBox1.Text.IndexOf(',');
                        int selPos = indexVirg == -1 ? textBox1.SelectionStart + 1 : textBox1.SelectionStart;
                        if (indexVirg != -1)
                            textBox1.Text = textBox1.Text.Remove(indexVirg, 1);

                        if (textBox1.Text.Length > 2)
                            textBox1.Text = textBox1.Text.Insert(textBox1.Text.Length - 2, ",");

                        textBox1.SelectionStart = selPos;
                        textBox1.SelectionLength = 0;
                    }
                }
            }


    Att,
    Fábio
    "To alcohol! The cause of and solution to all of life's problems." - Homer Simpson
    • Proposed as answer by Fábio Franco Friday, March 05, 2010 8:15 PM
    Friday, March 05, 2010 6:38 PM
  • Fiz umas alterações ficou bem bacana !

     

    private void FormatarValorMoeda(KeyEventArgs e, TextBox campo)
            {
                String str = string.Empty;

                str = campo.Text.Replace(".","").Replace(",","");
               
                int KeyCode = e.KeyValue;

                if (!IsNumeric(KeyCode))
                {
                    e.Handled = true;
                    return;
                }
                else
                {
                    e.Handled = true;
                }

                switch (e.KeyCode)
                {
                    case Keys.NumPad0:
                        KeyCode = (int)Keys.D0;
                        break;
                    case Keys.NumPad1:
                        KeyCode = (int)Keys.D1;
                        break;
                    case Keys.NumPad2:
                        KeyCode = (int)Keys.D2;
                        break;
                    case Keys.NumPad3:
                        KeyCode = (int)Keys.D3;
                        break;
                    case Keys.NumPad4:
                        KeyCode = (int)Keys.D4;
                        break;
                    case Keys.NumPad5:
                        KeyCode = (int)Keys.D5;
                        break;
                    case Keys.NumPad6:
                        KeyCode = (int)Keys.D6;
                        break;
                    case Keys.NumPad7:
                        KeyCode = (int)Keys.D7;
                        break;
                    case Keys.NumPad8:
                        KeyCode = (int)Keys.D8;
                        break;
                    case Keys.NumPad9:
                        KeyCode = (int)Keys.D9;
                        break;
                }


                if (((e.KeyCode == Keys.Delete) || (e.KeyCode == Keys.Back)) && (str.Length > 0))
                {
                    str = str.Substring(0, str.Length - 1);
                }
                else if (!((e.KeyCode == Keys.Delete) || (e.KeyCode == Keys.Back)))
                {
                    str = str + Convert.ToChar(KeyCode);
                }
                if (str.Length == 0)
                {
                    campo.Text = "";
                }

                //if (str.Length > 1)
                //{
                //    decimal valor = Convert.ToDecimal(str);
                //    string valorf = valor.ToString("N2");

                //    campo.Text = valorf.ToString();
                //}

                if (str.Length == 1)
                {
                    campo.Text = str;
                }
                else if (str.Length == 2)
                {
                    campo.Text = str;
                }
                else if (str.Length > 2 && str.Length <= 5)
                {
                    campo.Text = str.Substring(0, str.Length - 2) + "," + str.Substring(str.Length - 2);
                }
                else if (str.Length > 5 && str.Length <= 8)
                {
                    campo.Text = str.Substring(0, str.Length - 5) + "." + str.Substring(str.Length - 5, 3) + "," + str.Substring(str.Length - 2);
                }
                else if (str.Length > 8 && str.Length <= 11)
                {
                    campo.Text = str.Substring(0, str.Length - 8) + "." + str.Substring(str.Length - 8, 3) + "." + str.Substring(str.Length - 5, 3) + "," + str.Substring(str.Length - 2);
                }
                else if (str.Length > 11 && str.Length <= 14)
                {
                    campo.Text = str.Substring(0, str.Length - 11) + "." + str.Substring(str.Length - 11, 3) + "." + str.Substring(str.Length - 8, 3) + "." + str.Substring(str.Length - 5, 3) + "," + str.Substring(str.Length - 2);
                }

            }

    Tuesday, December 13, 2011 6:46 PM