2

重複の可能性:
FormatExceptionが未処理のエラーであるのはなぜですか?

私はC#とStack Overflowを初めて使用するので、この質問が不適切な場合(または間違った場所にある場合)は、自由に編集または削除してください。

簡単な電卓を作成しましたが、問題があります。テキストボックスの1つをクリアして別の番号を入力すると、「未処理の例外が発生しました」というメッセージが表示され、終了または続行するオプションが表示されます。texboxをクリアするたびにこのメッセージが表示されないようにするにはどうすればよいですか?

private void button1_Click(object sender, EventArgs e)
{
    int value1 = Convert.ToInt32(textBox1.Text);
    int value2 = Convert.ToInt32(textBox2.Text);
    textBox3.Text = sum(value1, value2).ToString();
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
    int vlera1 = Convert.ToInt32(textBox1.Text);
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
    int vlera2 = Convert.ToInt32(textBox2.Text);
}

private void textBox3_TextChanged(object sender, EventArgs e)
{ }

int sum(int value1, int value2) {
    return (value1) + (value2);
}
4

2 に答える 2

3

の空のデータを に変換しようとしているため、これint.TryParse(string s, out int result)の代わりに使用が発生しています。Convert.ToInt32(string value, int fromBase)
TextBoxInt32

if (int.TryParse(textBox1.Text, out vlera1))
{
    //assign here    
}
于 2012-11-10T11:51:25.160 に答える
1

FormatException型の構造体に変換できない文字列を に変換しようとすると、 が返さintれますint。を使用して、変換を実行する前に変換が可能int.TryParse(string s, out int result)かどうかを確認できます。stringint

private void textBox1_TextChanged(object sender, EventArgs e)
{
    int x = 0; //Initialize a new int of name x and set its value to 0
    if (int.TryParse(textBox1.Text, out x)) //Check if textBox1.Text is a valid int
    {
        int vlera1 = Convert.ToInt32(textBox1.Text); //Initialize a new int of name vlera2 and set its value to (textBox1.Text as int)
    }
    else
    {
        //DoSomething if required
    }
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
    int x = 0; //Initialize a new int of name x and set its value to 0
    if (int.TryParse(textBox2.Text, out x)) //Check if textBox2.Text is a valid int
    {
        int vlera2 = Convert.ToInt32(textBox2.Text);  //Initialize a new int of name vlera2 and set its value to (textBox1.Text as int)
    }
    else
    {
        //DoSomething if required
    }
}

別の解決策

いつでも try-catch ステートメントを使用して、提供したコードから例外がスローされたかどうかを確認し、必要に応じて何かを行うことができます

private void textBox1_TextChanged(object sender, EventArgs e)
{
    try
    {
        int vlera1 = Convert.ToInt32(textBox1.Text); //Initialize a new int of name vlera2 and set its value to (textBox1.Text as int)
    }
    catch (Exception EX)
    {
        MessageBox.Show(EX.Message); //(not required) Show the message from the exception in a MessageBox
    }
}

private void textBox2_TextChanged(object sender, EventArgs e)
{
    try
    {
        int vlera2 = Convert.ToInt32(textBox2.Text);  //Initialize a new int of name vlera2 and set its value to (textBox1.Text as int)
    }
    catch (Exception EX)
    {
        MessageBox.Show(EX.Message); //(not required) Show the message from the exception in a MessageBox
    }
}

注意: try-catch ステートメントは、try ブロックとそれに続く 1 つ以上の catch 句で構成され、さまざまな例外のハンドラーを指定します。

ありがとう、
これがお役に立てば幸いです:)

于 2012-11-10T12:34:20.470 に答える