none
A cadeia de caracteres de entrada não estava em um formato incorreto. RRS feed

  • Pergunta

  • Olá. Estou com uma dúvida. Vi outros tópicos parecidos, mas não consegui resolver meu problema. Se alguém puder me ajudar, meu código é esse:

                                           

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                int Cnh = 0;
                Cnh = int.Parse(Txt_Cnh.Text);

            }

            private void textBox2_TextChanged(object sender, EventArgs e)
            {
                double Multas = 0;
                Multas = int.Parse(Txt_Qtd.Text);
            }

            private void textBox3_TextChanged(object sender, EventArgs e)
            {
                double Val = 0;
                Val = double.Parse(Txt_Valor.Text);
            }

            private void button1_Click(object sender, EventArgs e)
            {
                double Val, Total;
                int Multas, Cnh;

                Cnh = int.Parse(Txt_Cnh.Text);
                Multas = int.Parse(Txt_Qtd.Text);
                Val = double.Parse(Txt_Valor.Text);

                if (Cnh > 0 && Cnh < 4328)
                {

                Total = (Val) * (Multas);
                Result.Text = Total.ToString();
                }
                    else
                {
                    MessageBox.Show ("CNH incorreta!");
                }
            }

            private void label5_Click(object sender, EventArgs e)
            {
                double Total = 0;
                Total = double.Parse(Result.Text);
            }

            private void button2_Click(object sender, EventArgs e)
            {
                int Cnh;
                double Total, Soma = 0;

                Cnh = int.Parse(Txt_Cnh.Text);

                while (Cnh > 0 && Cnh < 4328)
                {            
                    Total = double.Parse(Result.Text);
                    Soma = Soma + Total;

                    Txt_Cnh.Text = string.Empty;
                    Txt_Qtd.Text = string.Empty;
                    Txt_Valor.Text = string.Empty;
                    Result.Text = string.Empty;
                }
            }

            private void button3_Click(object sender, EventArgs e)
            {
                int Maior = 0, Cnh, Multas, MaiorCnh;

                Cnh = int.Parse(Txt_Cnh.Text);

                Multas = int.Parse(Txt_Qtd.Text);

                if (Multas > Maior)
                {
                    Maior = Multas;
                    MaiorCnh = Cnh;
                }
            }

            private void label6_Click(object sender, EventArgs e)
            {
                int MaiorCnh;
                double Soma;

                MaiorCnh = int.Parse("A CNH " + label6 + " tem mais multas.");
                Soma = double.Parse("Total de recursos arrecadados R$" + label6);
            }


        }
    }

    Qdo apago o número, ou clico no botão 2 ele dá o erro "A cadeia de caracteres de entrada não estava em um formato incorreto.". Desde já agradeço.

    quinta-feira, 6 de novembro de 2014 11:26

Respostas

  • Remove essa parte ou comenta no seu código, você já esta fazendo isso no botão e testa novamente:
    private void textBox2_TextChanged(object sender, EventArgs e)
            {
                //double Multas = 0;
                //Multas = int.Parse(Txt_Qtd.Text);
            }
    
            private void textBox3_TextChanged(object sender, EventArgs e)
            {
                //double Val = 0;
               // Val = double.Parse(Txt_Valor.Text);
            }


    • Marcado como Resposta Bettoo quinta-feira, 6 de novembro de 2014 12:45
    quinta-feira, 6 de novembro de 2014 12:40
  • troca seu while por if ja que você so esta fazendo uma comparação não precisa utilizar ele senão fica em loop:

      if (Cnh > 0 && Cnh < 4328)
                {
                Total = double.Parse(Result.Text);
                    Soma = Soma + Total;
                    Multas = int.Parse(Txt_Qtd.Text);
    
                    if (Multas > Maior)
                    {
                        Maior = Multas;
                        MaiorCnh = Cnh;
                    }
                  
                }


    • Editado Mr. GMSOFT quinta-feira, 6 de novembro de 2014 12:58
    • Marcado como Resposta Bettoo quinta-feira, 6 de novembro de 2014 13:14
    quinta-feira, 6 de novembro de 2014 12:58

Todas as Respostas

  • Verifica o que essas conversões estão retornando

               Cnh = int.Parse(Txt_Cnh.Text);
    
                while (Cnh > 0 && Cnh < 4328)
                {            
                    Total = double.Parse(Result.Text);
                    Soma = Soma + Total;
    
                    Txt_Cnh.Text = string.Empty;
                    Txt_Qtd.Text = string.Empty;
                    Txt_Valor.Text = string.Empty;
                    Result.Text = string.Empty;
                }

    quinta-feira, 6 de novembro de 2014 11:32
  • Então, o botão 2 seria para digitar a próxima cnh, multas e valor.

    Assim, o q citou acima, coloquei para deixar em branco os campos para ser digitado.

    quinta-feira, 6 de novembro de 2014 12:04
  • Veja o que essas duas conversões estão te retornando:

    Cnh = int.Parse(Txt_Cnh.Text);
    
    Total = double.Parse(Result.Text);
    Se realmente é algo que se possa converter em inteiro (Cnh) e Double(Total)
    quinta-feira, 6 de novembro de 2014 12:07
  • Converte sim, faz a conta, de boa.

    Mas se por exemplo, eu digito um número e quero corrigi-lo, apertando o backspace dá o erro citado.

    quinta-feira, 6 de novembro de 2014 12:14
  • É por que você colocou no evento textChanged ou seja toda vez que alterar ele vai atribuir um valor para a conversão:


       

       private void textBox2_TextChanged(object sender, EventArgs e)
            {
                double Multas = 0;
    if(Txt_Qtd.Text!=null)
    {            Multas = int.Parse(Txt_Qtd.Text);
    }
    else
    {
    Multas= 0;
    }       
    }

            private void textBox3_TextChanged(object sender, EventArgs e)
            {
                double Val = 0;

    if(Txt_Valor.Text!=null)
    {
                Val = double.Parse(Txt_Valor.Text);
    }
    else

    {
    Val=0;
    }
            }

    Tenta assim

    • Editado Mr. GMSOFT quinta-feira, 6 de novembro de 2014 12:22
    quinta-feira, 6 de novembro de 2014 12:21
  • não deu... :(

    quinta-feira, 6 de novembro de 2014 12:32
  • Remove essa parte ou comenta no seu código, você já esta fazendo isso no botão e testa novamente:
    private void textBox2_TextChanged(object sender, EventArgs e)
            {
                //double Multas = 0;
                //Multas = int.Parse(Txt_Qtd.Text);
            }
    
            private void textBox3_TextChanged(object sender, EventArgs e)
            {
                //double Val = 0;
               // Val = double.Parse(Txt_Valor.Text);
            }


    • Marcado como Resposta Bettoo quinta-feira, 6 de novembro de 2014 12:45
    quinta-feira, 6 de novembro de 2014 12:40
  • isso! O erro não aparece qdo apago!

    Boa garoto!

    Agora é tentar terminar o programa!

    Valeu!

    quinta-feira, 6 de novembro de 2014 12:45
  • Se puder continuar me ajudando...rs

    Agora para aqui. O mesmo erro.

     private void button2_Click(object sender, EventArgs e)
            {
                int Maior = 0, Cnh, Multas, MaiorCnh;
                double Total, Soma = 0;

                Cnh = int.Parse(Txt_Cnh.Text);
                
                while (Cnh > 0 && Cnh < 4328)
                {
                    Total = double.Parse(Result.Text);
                    Soma = Soma + Total;
                    
                    Multas = int.Parse(Txt_Qtd.Text);

                    if (Multas > Maior)
                    {
                        Maior = Multas;
                        MaiorCnh = Cnh;
                    }

                    Txt_Cnh.Text = "";
                    Txt_Qtd.Text = "";
                    Txt_Valor.Text = "";
                    Result.Text = "";
                }
            }

    quinta-feira, 6 de novembro de 2014 12:50
  • Se puder continuar me ajudando...rs

    Agora para aqui. O mesmo erro.

     private void button2_Click(object sender, EventArgs e)
            {
                int Maior = 0, Cnh, Multas, MaiorCnh;
                double Total, Soma = 0;

                Cnh = int.Parse(Txt_Cnh.Text);
                
                while (Cnh > 0 && Cnh < 4328)
                {
                    Total = double.Parse(Result.Text);
                    Soma = Soma + Total;
                    
                    Multas = int.Parse(Txt_Qtd.Text);

                    if (Multas > Maior)
                    {
                        Maior = Multas;
                        MaiorCnh = Cnh;
                    }

                    Txt_Cnh.Text = "";
                    Txt_Qtd.Text = "";
                    Txt_Valor.Text = "";
                    Result.Text = "";
                }
            }

    Você esta zerando os valores dos TextBox dentro do loop, faça dessa maneira:

     private void button2_Click(object sender, EventArgs e)
            {
                int Maior = 0, Cnh, Multas, MaiorCnh;
                double Total, Soma = 0;
    
                Cnh = int.Parse(Txt_Cnh.Text);
                
                while (Cnh > 0 && Cnh < 4328)
                {
                    Total = double.Parse(Result.Text);
                    Soma = Soma + Total;
                    
                    Multas = int.Parse(Txt_Qtd.Text);
    
                    if (Multas > Maior)
                    {
                        Maior = Multas;
                        MaiorCnh = Cnh;
                    }
                  
                }
                   //Fora do while pode limpar o textBox
                    Txt_Cnh.Text = "";
                    Txt_Qtd.Text = "";
                    Txt_Valor.Text = "";
                    Result.Text = "";
            }

    quinta-feira, 6 de novembro de 2014 12:52
  • Travou sem aparecer o erro...

    to gostando da sua ajuda irmão!

    quinta-feira, 6 de novembro de 2014 12:55
  • troca seu while por if ja que você so esta fazendo uma comparação não precisa utilizar ele senão fica em loop:

      if (Cnh > 0 && Cnh < 4328)
                {
                Total = double.Parse(Result.Text);
                    Soma = Soma + Total;
                    Multas = int.Parse(Txt_Qtd.Text);
    
                    if (Multas > Maior)
                    {
                        Maior = Multas;
                        MaiorCnh = Cnh;
                    }
                  
                }


    • Editado Mr. GMSOFT quinta-feira, 6 de novembro de 2014 12:58
    • Marcado como Resposta Bettoo quinta-feira, 6 de novembro de 2014 13:14
    quinta-feira, 6 de novembro de 2014 12:58
  • Vc é o cara!...kkk
    quinta-feira, 6 de novembro de 2014 13:08
  • Valeu!
    quinta-feira, 6 de novembro de 2014 13:39
  • Por nada
    quinta-feira, 6 de novembro de 2014 13:40
  • Não querendo abusar, sabe como faço para mostrar a CNH com mais multas e o total das multas arrecadadas?

    coloquei nessa parte:

            private void button2_Click(object sender, EventArgs e)
            {
                int Maior = 0, Cnh, Multas, MaiorCnh;
                double Total, Soma=0;

                Cnh = int.Parse(Txt_Cnh.Text);

                if (Cnh > 0 && Cnh < 4328)
                {
                    Total = double.Parse(Result.Text);
                    Soma = Soma + Total;

                    Multas = int.Parse(Txt_Qtd.Text);

                    if (Multas > Maior)
                    {
                        Maior = Multas;
                        MaiorCnh = Cnh;

                        label6.Text = Soma.ToString();
                        label7.Text = MaiorCnh.ToString();
                    }

                }

                Txt_Cnh.Text = "";
                Txt_Qtd.Text = "";
                Txt_Valor.Text = "";
                Result.Text = "";
            }

            private void label6_Click(object sender, EventArgs e)
            {
                double Soma;
                Soma = double.Parse(label6.Text);
            }

            private void label7_Click(object sender, EventArgs e)
            {
                int MaiorCnh;
                MaiorCnh = int.Parse(label7.Text);
            }
        }
    }

    quinta-feira, 6 de novembro de 2014 14:34
  • Como esta armazenando as cnhs?
    quinta-feira, 6 de novembro de 2014 14:39
  • entao, no começo pensei no enquanto...

    aí no loop ia somando

    quinta-feira, 6 de novembro de 2014 14:41
  • Então para você fazer somatorio você tera de ter varios valores, os seus valores estão todos em textBox?
    quinta-feira, 6 de novembro de 2014 14:45
  • isso
    quinta-feira, 6 de novembro de 2014 14:46
  • Nesse caso seria melhor você criar uma classe para armazenar (cnh,pontos,valor_multa,qtd_multa), pois da maneira que esta o programa só faz isso somente para uma cnh:

    Vê nesse tutorial como criar classes:
    http://www.macoratti.net/12/01/c_stc1.htm


    Vê só, recoloquei o while e adicionei um contador mais isso so vai funcionar com varias cnhs com mesmo valor de multa informado na textBox e vou verificando até o limite 4328, o mais recomendavel é seguir o que falei acima sobre classes.
    private void button2_Click(object sender, EventArgs e)
            {
                int Maior = 0, Cnh, Multas, MaiorCnh;
                double Total, Soma=0;
    
                Cnh = int.Parse(Txt_Cnh.Text);
    
                while(Cnh > 0 && Cnh < 4328)
                {
                    Total = double.Parse(Result.Text);
                    Soma = Soma + Total;
    
                    Multas = int.Parse(Txt_Qtd.Text);
    
                    if (Multas > Maior)
                    {
                        Maior = Multas;
                        MaiorCnh = Cnh;
    
                        label6.Text = Soma.ToString();
                        label7.Text = MaiorCnh.ToString();
                    }
                  Cnh++;
    
                }
    
                Txt_Cnh.Text = "";
                Txt_Qtd.Text = "";
                Txt_Valor.Text = "";
                Result.Text = "";
            }
    
            private void label6_Click(object sender, EventArgs e)
            {
                double Soma;
                Soma = double.Parse(label6.Text);
            }
    
            private void label7_Click(object sender, EventArgs e)
            {
                int MaiorCnh;
                MaiorCnh = int.Parse(label7.Text);
            }
        }
    }

    quinta-feira, 6 de novembro de 2014 15:00
  • VALEU, mais uma vez!

    Vou dar uma olhada sim!

    quinta-feira, 6 de novembro de 2014 15:09
  • Não consegui, mas valeu pela força!
    quinta-feira, 6 de novembro de 2014 18:28