1

イベントハンドラメソッドbutton1_Clickを記述して、学生の成績が「合格」か「不合格」かを計算します。合計スコアが50以上の場合、学生はコースに合格します。合計スコアは、Midterm(textbox1)+ Final(textbox2)スコアです。ただし、教師は生徒に10ポイント相当の追加クレジット(チェックボックス1)を与えることができます。結果はtextBox3に表示されます

これが私のコードです:

private void button1_Click(object sender, EventArgs e)
        {

            int midtermInt = int.Parse(textBox1.Text);


            int finalInt = int.Parse(textBox2.Text);


            if (checkBox1.Checked)
            {
                if ((midtermInt + finalInt) + 10 >= 50)
                {
                    grade.Text = "PASS";
                }
                else if ((midtermInt + finalInt) + 10 < 50)
                {
                    grade.Text = "FAIL";
                }
            }
            else if (!checkBox1.Checked)
            {
                if ((midtermInt + finalInt) >= 50)
                {
                    grade.Text = "PASS";
                }
                else if ((midtermInt + finalInt) < 50)
                {
                    grade.Text = "FAIL";
                }
            }

実行すると、「Inut文字列が正しい形式ではありませんでした。..:(私はC#を初めて使用します。コードがどこか間違っている場合は、教えてください。

入力は整数のみで、テキストはありません。

4

3 に答える 3

1

テキストボックスに数字以外の文字を入力してテキストを解析しようとすると、この例外がスローされます。入力をトリミングしてみて、フォームにUI検証を追加することを確実に検討してください。

于 2012-08-13T10:26:33.053 に答える
1

int.TryParse insted int.Parseを使用する必要があります。チェックでは、文字列が正しい形式であることが指定されています。コードは次のようになります。

int midtermInt;
if (!int.TryParse(textBox1.Text, out midtermInt))
{
    labelError.Text = "Icorrect value in field 'textBox1'".
    return;
}
于 2012-08-13T10:26:47.793 に答える
0

TextChangedイベントでテキストボックス内のテキストが正しい形式であるかどうかのチェックを追加できます。

private void textBox_TextChanged(object sender, EventArgs e)
{
   int val;
   if (textBox.Text.Length == 0 || !int.TryParse(textBox.Text, out val))
      tsPassingScore.Text = "0";
}

そして、クリックするだけで、textBoxに番号があるかどうかをもう一度確認できます。int.TryParse

また、コードを改善することもできます。最終的な合計が50より大きくない場合、自動的に小さくなります。そして、追加の変数を導入すると、より読みやすくなります-教師のために追加のクレジット:

int extraCredit = checkBox1.Checked ? 10 : 0;
int finalScore = midtermInt + finalInt + extraCredit;
if (finalScore >= 50)
  grade.Text = "PASS";
else
  grade.Text = "FAIL";
于 2012-08-13T10:25:08.730 に答える