Cadena de entrada no tiene el formato correcto
Soy nuevo en C#, tengo algunos conocimientos básicos de Java pero no puedo ejecutar este código correctamente.
Es sólo una calculadora básica, pero cuando ejecuto el programa VS2008 me da este error:
Hice casi el mismo programa pero en java usando JSwing y funcionó perfectamente.
Aquí está la forma 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 = "";
}
}
¿Cual puede ser el problema? ¿Hay alguna manera de solucionarlo?
PD: Yo también lo intenté
a = Convert.ToInt32(textBox1.text);
b = Convert.ToInt32(textBox2.text);
y no funcionó.
El error significa que la cadena desde la que estás intentando analizar un número entero no contiene en realidad un número entero válido.
Es extremadamente improbable que los cuadros de texto contengan un número entero válido inmediatamente después de crear el formulario, que es de donde se obtienen los valores enteros. Tendría mucho más sentido actualizar a
y b
en los eventos de clic del botón (de la misma manera que lo hace en el constructor). Además, consulte el Int.TryParse
método: es mucho más fácil de usar si la cadena en realidad no contiene un número entero; no genera una excepción, por lo que es más fácil recuperarse.
Me encontré con esta excepción exacta, excepto que no tenía nada que ver con el análisis de entradas numéricas. Entonces esta no es una respuesta a la pregunta del OP, pero creo que es aceptable compartir el conocimiento.
Declaré una cadena y la estaba formateando para usarla con JQTree , que requiere llaves ({}). Debe utilizar llaves dobles para que se acepte como una cadena con el formato adecuado:
string measurements = string.empty;
measurements += string.Format(@"
{{label: 'Measurement Name: {0}',
children: [
{{label: 'Measured Value: {1}'}},
{{label: 'Min: {2}'}},
{{label: 'Max: {3}'}},
{{label: 'Measured String: {4}'}},
{{label: 'Expected String: {5}'}},
]
}},",
drv["MeasurementName"] == null ? "NULL" : drv["MeasurementName"],
drv["MeasuredValue"] == null ? "NULL" : drv["MeasuredValue"],
drv["Min"] == null ? "NULL" : drv["Min"],
drv["Max"] == null ? "NULL" : drv["Max"],
drv["MeasuredString"] == null ? "NULL" : drv["MeasuredString"],
drv["ExpectedString"] == null ? "NULL" : drv["ExpectedString"]);
Con suerte, esto ayudará a otras personas que encuentren esta pregunta pero no estén analizando datos numéricos.