Chaîne d'entrée n'était pas dans un format correct
Je suis nouveau en C#, j'ai quelques connaissances de base en Java, mais je ne peux pas obtenir ce code fonctionne correctement.
C'est juste une calculatrice de base, mais quand je lance le programme de VS2008 me donne cette erreur:
Je n'ai presque le même programme mais en java à l'aide de JSwing et il a parfaitement fonctionné.
Voici la forme de c#:
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 = "";
}
}
Ce que peut être le problème? Est-il un moyen de le résoudre?
PS: j'ai aussi essayé
a = Convert.ToInt32(textBox1.text);
b = Convert.ToInt32(textBox2.text);
et ça ne fonctionne pas.
Vous devez vous connecter pour publier un commentaire.
L'erreur signifie que la chaîne que vous êtes en essayant d'analyser un nombre entier à partir de n'est pas réellement contenir un entier valide.
Il est extrêmement peu probable que les zones de texte contiendra un entier valide immédiatement lorsque le formulaire est créé, c'est là où vous êtes l'obtention de valeurs entières. Il serait beaucoup plus logique de mettre à jour
a
etb
dans le bouton cliquez sur événements (de la même manière que vous êtes dans le constructeur). Aussi, découvrez leInt.TryParse
méthode - c'est beaucoup plus facile à utiliser si la chaîne ne pourrait pas en fait contenir un entier, il ne lance pas d'exception, donc il est plus facile à récupérer.Je suis tombé sur cette exception exact, sauf qu'il n'avait rien à voir avec l'analyse les entrées numériques. Donc ce n'est pas une réponse à la discussion de la question, mais je pense que c'est acceptable de partager les connaissances.
J'avais déclaré une chaîne et a été mise en forme pour une utilisation avec JQTree qui nécessite des accolades ({}). Vous devez utiliser doublé accolades pour qu'il puisse être accepté comme une chaîne formatée correctement:
J'espère que cela aidera d'autres gens qui trouvent cette question, mais ne sont pas l'analyse de données numériques.
Si vous n'êtes pas valider explicitement les chiffres dans le champ de texte, en tout cas, il est préférable de l'utiliser
Maintenant, si le résultat est un succès, alors vous pouvez continuer à faire vos calculs.
result
n'a pas besoin d'être initialisé.Problèmes
Il existe quelques cas pourquoi l'erreur se produit:
Parce que
textBox1.Text
contient seulement le nombre, mais le nombre est trop grand/trop petitParce que
textBox1.Text
contient:space
au début/à la fin,-
au début) et/ouNumberStyles.AllowThousands
ou vous spécifiezNumberStyles.AllowThousands
mais mettre malthousand separator
dans la culture et/ouint
analyse syntaxique)PAS OK Exemples:
Cas 1
Cas 2)
Cas 2 b)
Cas 2 c)
Apparemment PAS OK, mais en fait, OK Exemples:
Cas 2) OK
Cas 2 b) OK
Solutions
Dans tous les cas, veuillez vérifier la valeur de
textBox1.Text
avec votre débogueur Visual Studio et assurez-vous qu'il a purement acceptable format numérique pourint
gamme. Quelque chose comme ceci:Aussi, vous pouvez envisager de
TryParse
au lieu deParse
pour s'assurer que la non-analysée nombre ne vous cause pas de problème d'exception.vérifier le résultat de
TryParse
et la poignée si elle n'est pastrue
Vous n'avez pas mentionné si votre zone de texte ont des valeurs au moment de la conception ou de maintenant. Lorsque le formulaire initialise la zone de texte ne peut pas hae valeur si vous n'avez pas le mettre dans la zone de texte lorsque pendant la conception du formulaire. vous pouvez mettre int valeur dans la conception de formulaire par la mise en texte de la propriété dans la conception et cela devrait fonctionner.
Dans mon cas, j'ai oublié de mettre le double accolade à s'échapper. {{myobject}}
J'ai eu un problème similaire que j'ai résolu avec la technique suivante:
La levée de l'exception à la ligne de code suivante (voir le texte décoré avec des ** ci-dessous):
Après une petite enquête, j'ai réalisé que le problème était que la chaîne mise en forme inclus un signe dollar ($) que le Parse/TryParse méthodes ne peuvent pas résoudre (c'est à dire - la bande). Donc, en utilisant le Supprimer(...) la méthode de l'objet string j'ai changé la ligne d':
À ce point de l'analyse(...) la méthode a fonctionné comme prévu.
c'était mon problème ..
dans mon cas, j'ai changé le PERSAN nombre de LATINO-nombre et cela a fonctionné.
ET aussi trime votre chaîne avant de les convertir.