Sono nuovo con C#, ho qualche conoscenza di base in Java ma non riesco a far funzionare correttamente questo codice.
È solo una calcolatrice di base, ma quando eseguo il programma VS2008 mi dà questo errore:
Ho fatto quasi lo stesso programma ma in java usando JSwing e ha funzionato perfettamente.
Ecco il modulo di 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 = "";
}
}
Quale può essere il problema? C'è un modo per risolverlo?
PS: Ho anche provato
a = Convert.ToInt32(textBox1.text);
b = Convert.ToInt32(textBox2.text);
e non ha funzionato.
L'errore significa che la stringa da cui stai cercando di analizzare un intero non contiene effettivamente un intero valido.
E' estremamente improbabile che le caselle di testo contengano un numero intero valido immediatamente quando il modulo viene creato - che è dove si ottengono i valori interi. Avrebbe molto più senso aggiornare a
e b
negli eventi di click del pulsante (nello stesso modo in cui sei nel costruttore). Inoltre, controlla il metodo Int.TryParse
- è molto più facile da usare se la stringa potrebbe non contenere effettivamente un intero - non lancia un'eccezione quindi è più facile da recuperare.
Se non state validando esplicitamente per i numeri nel campo di testo, in ogni caso è meglio usare
int result=0;
if(int.TryParse(textBox1.Text,out result))
Ora, se il risultato è positivo, allora potete procedere con i vostri calcoli.
Non hai menzionato se la tua casella di testo ha valori in fase di progettazione o ora. Quando il modulo inizializza la casella di testo potrebbe non avere un valore se non l'hai messo nella casella di testo durante la progettazione del modulo. Puoi mettere un valore int nella progettazione del modulo impostando la proprietà text in desgin e questo dovrebbe funzionare.