110 votes

La chaîne d'entrée n'était pas dans un format correct

Je suis novice en C#, j'ai quelques connaissances de base en Java mais je n'arrive pas à faire fonctionner ce code correctement.

C'est juste une calculatrice de base, mais quand je lance le programme VS2008 me donne cette erreur :

Calculator

J'ai fait presque le même programme mais en java en utilisant JSwing et cela a fonctionné parfaitement.

Voici le formulaire de c# :

Form

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 calculadorac
{
    public partial class Form1 : Form
    {

    int a, b, c;
    String resultado;

    public Form1()
    {
        InitializeComponent();
        a = Int32.Parse(textBox1.Text);
        b = Int32.Parse(textBox2.Text);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        add();
        result();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        substract();
        result();
    }

    private void button3_Click(object sender, EventArgs e)
    {
        clear();
    }

    private void add()
    {
        c = a + b;
        resultado = Convert.ToString(c);
    }

    private void substract()
    {
        c = a - b;
        resultado = Convert.ToString(c);
    }

    private void result()
    {
        label1.Text = resultado;
    }

    private void clear()
    {
        label1.Text = "";
        textBox1.Text = "";
        textBox2.Text = "";
    }
}

Quel peut être le problème ? Existe-t-il un moyen de le résoudre ?

PS : J'ai également essayé

a = Convert.ToInt32(textBox1.text);
b = Convert.ToInt32(textBox2.text);

et cela n'a pas fonctionné.

4voto

quemeful Points 134

Vous pouvez rencontrer cette exception lorsque vous utilisez un formateur de chaîne dont la syntaxe des crochets n'est pas valide.

// incorrect
string.Format("str {incorrect}", "replacement")

// correct
string.Format("str {1}", "replacement")

3voto

Kirtan Pandya Points 73

Vous n'avez pas indiqué si vos boîtes de texte ont des valeurs dans la période de conception ou maintenant. Lors de l'initialisation du formulaire, la zone de texte peut ne pas avoir de valeur si vous ne l'avez pas mise dans la zone de texte lors de la conception du formulaire. Vous pouvez mettre une valeur int dans la conception du formulaire en définissant la propriété text dans la conception et cela devrait fonctionner.

0voto

afshin Points 26

C'était aussi mon problème Dans mon cas, j'ai changé le numéro PERSIEN en numéro LATIN et cela a fonctionné. ET trimez aussi votre chaîne de caractères avant de la convertir.

PersianCalendar pc = new PersianCalendar();
char[] seperator ={'/'};
string[] date = txtSaleDate.Text.Split(seperator);
int a = Convert.ToInt32(Persia.Number.ConvertToLatin(date[0]).Trim());

0voto

astevens009 Points 15

J'ai eu un problème similaire que j'ai résolu avec la technique suivante :

L'exception a été levée à la ligne de code suivante (voir le texte orné de ** ci-dessous) :

static void Main(string[] args)
    {

        double number = 0;
        string numberStr = string.Format("{0:C2}", 100);

        **number = Double.Parse(numberStr);**

        Console.WriteLine("The number is {0}", number);
    }

Après quelques recherches, j'ai compris que le problème venait du fait que la chaîne formatée contenait un signe dollar ($) que les méthodes Parse/TryParse ne peuvent pas résoudre (c'est-à-dire supprimer). En utilisant la méthode Remove(...) de l'objet string, j'ai donc remplacé la ligne par :

number = Double.Parse(numberStr.Remove(0, 1)); // Remove the "$" from the number

À ce stade, la méthode Parse(...) a fonctionné comme prévu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X