Usuário com melhor resposta
Converter TextBox para double

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*/ } } }
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
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
-
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()); }