none
Converter TextBox para double RRS feed

  • Pergunta

  • Bom noite a todos! 

    Estou iniciando no mundo da programação, e com isso fiz um curso de C# na fundação Bradesco e resolvi aprimorar o projeto.

    O projeto funciona da seguinte maneiro:

    O usuário digita o código do produto, em seguida aparece o produto e o valor e o total.

    estou querendo colocar algo para quando o usuário receber uma compra, ele possa esta colocando em uma textbox a o valor recebido, e uma label retornaria o troco.

                        //Entrada de dinheiro para calcular o troco
                        double dinheiro = Convert.ToDouble(txtDinheiro.Text);
                        double troco;

                        troco = dinheiro - soma;
                        lblTroco.Text = ("TROCO: R$ " + troco.Tostring());

    porem tentei fazer a conversão do textbox para double e efetua a subtração com a soma e esta dando o seguinte erro 

    (System.FormatException: 'A cadeia de caracteres de entrada não estava em um formato correto.')

    Sem essa logica ele funciona corretamente


    Segue o código do Projeto

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace pfr_11.ProjetoFinal_SISTEMA_CANTINA
    {
        public partial class Form1 : Form
        {
            /*  Declaração de 3 arrays para armazenar 6 produtos cada um  e seus respectivos códigos e valores.  */
            string[] produtos = new string[6];
            string[] codigo = new string[6];
            double[] valor = new double[6];
            double soma;
           
            public Form1()
            {
                InitializeComponent();
            }
    
            private void txtCodigo_TextChanged(object sender, EventArgs e)
            {
    
                /**inicia com uma condição, se o usuário digitar um código  com 5 caracteres (length),
                 * esse código é adicionado ao listBox.             
                 * A propriedade length retorna a quantidade de caracteres.             
                 * Após o conteúdo ser enviado para o ListBox, o textbox será limpo e o 
                 * Focus posiciona o cursor para o TextBox para uma nova digitação              
                 */
                if (txtCodigo.Text.Length == 3)
    
                {
                    int indice = 0;
                    for (int prod = 1; prod < codigo.Length; prod++)
                    {
                        //Façaenquanto o prod for menor ou igual a qtd de itensdo array
                        if (txtCodigo.Text == codigo[prod])
                        {
                            indice = prod;
                        }
                    }
                    if (indice == 0)
                    {
                        /**Condiçãos, se foi encontrado o produto
                        *Ele retorna as informações de acordo com o indice
                        * Caso nao encontre o produto aparecera a mensagem 
                        */
                        MessageBox.Show("Produto não encontrado");
                        picImagem.ImageLocation = "c://imagens/naocadastrado.png";
                        txtCodigo.Text = "";
                        txtCodigo.Focus();
    
                    }
                    else
                    {
                        //o conteudo adiciona no listbox concatena + informações (Codigo/nome/valor)
    
                        lstCaixa.Items.Add(txtCodigo.Text + " -- " + produtos[indice] + "-- R$ " + valor[indice]);
    
                        soma = soma + valor[indice];
                        lblTotal.Text = ("Valor Total R$ " + soma);
    
    
                        picImagem.ImageLocation = "c://Imagens/" + codigo[indice] + ".jpg";
                        //Localização das imagens deve ser colocada em uma pasta Imagens no disco local c
    
                        txtCodigo.Text = "";
                        txtCodigo.Focus();
                        //O textBox sera limpo  e o focus posiciona o cursor no textebox para uma nova 
    
                        //Entrada de dinheiro para calcular o troco
                        double dinheiro = Convert.ToDouble(txtDinheiro.Text);
                        double troco; 
    
                        troco = dinheiro - soma;
                        lblTroco.Text = ("TROCO: R$ " + troco.ToString());
                    }
                }
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                carregarArray();
                soma = 0;
                /*Ao entrar no Form Load será chamado o método*/
            }
            private void carregarArray()
            /*Criação do Método para ser chamado quando necessário, 
             * isso evita repetir          várias vezes o mesmo código
             */
            {
                codigo[1] = "001";
                codigo[2] = "002";
                codigo[3] = "003";
                codigo[4] = "004";
                codigo[5] = "005";
    
                produtos[1] = "Pastel";
                produtos[2] = "coxinha";
                produtos[3] = "Hot_Dog";
                produtos[4] = "Chocolate";
                produtos[5] = "suco";
    
                valor[1] = 6.00;
                valor[2] = 5.00;
                valor[3] = 12.00;
                valor[4] = 3.50;
                valor[5] = 8.00;
    
                /*Códigos, Produtos e Valores ref. os arrays que foram declarados*/
            }
        }
    }
    
    

    quinta-feira, 3 de janeiro de 2019 23:59

Respostas

  • Olá,

    A princípio o erro está aqui pois se o valor do txtDinheiro estiver vazio ou inválido irá disparar a exception.

    //Entrada de dinheiro para calcular o troco
    double dinheiro = Convert.ToDouble(txtDinheiro.Text);

    Você pode colocar um tratamento para evitar o erro:

    //Entrada de dinheiro para calcular o troco
    double dinheiro = 0;
    double.TryParse(txtDinheiro.Text, out dinheiro);

    O ideal seria você aplicar validações na tela para checar os inputs dos usuários, dá uma olhada no link abaixo, tem umas dicas legais:

    https://www.c-sharpcorner.com/blogs/how-to-use-validation-in-windows-form-application


    • Editado Thiago Bottari sábado, 5 de janeiro de 2019 20:00
    • Marcado como Resposta Thiago-Moura domingo, 6 de janeiro de 2019 21:41
    sábado, 5 de janeiro de 2019 19:59

Todas as Respostas

  • Olá,

    A princípio o erro está aqui pois se o valor do txtDinheiro estiver vazio ou inválido irá disparar a exception.

    //Entrada de dinheiro para calcular o troco
    double dinheiro = Convert.ToDouble(txtDinheiro.Text);

    Você pode colocar um tratamento para evitar o erro:

    //Entrada de dinheiro para calcular o troco
    double dinheiro = 0;
    double.TryParse(txtDinheiro.Text, out dinheiro);

    O ideal seria você aplicar validações na tela para checar os inputs dos usuários, dá uma olhada no link abaixo, tem umas dicas legais:

    https://www.c-sharpcorner.com/blogs/how-to-use-validation-in-windows-form-application


    • Editado Thiago Bottari sábado, 5 de janeiro de 2019 20:00
    • Marcado como Resposta Thiago-Moura domingo, 6 de janeiro de 2019 21:41
    sábado, 5 de janeiro de 2019 19:59
  • Obrigado amigo, vou da uma estudada nesse artigo que você me indicou.

    entretanto seguir o código que você me passou, e criei um evento para toda vez que o usuário inserir um valor no textbox já efetua o cálculo.

     //Entrada de dinheiro para calcular o troco
            private void txtDinheiro_TextChanged(object sender, EventArgs e)
            {
                double dinheiro = 0.0;
                double.TryParse(txtDinheiro.Text, out dinheiro);
    
                double troco = dinheiro - soma;
                lblTroco.Text = ("TROCO: R$ " + troco.ToString());
            }

    domingo, 6 de janeiro de 2019 15:04