Cadena de entrada no tiene el formato correcto

Resuelto kustomrtr asked hace 13 años • 9 respuestas

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:

Calculadora

Hice casi el mismo programa pero en java usando JSwing y funcionó perfectamente.

Aquí está la forma de C#:

Forma

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ó.

kustomrtr avatar Nov 30 '11 12:11 kustomrtr
Aceptado

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 ay ben los eventos de clic del botón (de la misma manera que lo hace en el constructor). Además, consulte el Int.TryParsemé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.

Jon avatar Nov 30 '2011 05:11 Jon

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.

delliottg avatar Oct 23 '2014 16:10 delliottg