2016-09-27 1 views
-2
namespace Calculator 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Calculate_Click(object sender, EventArgs e) 
     { 
      int num1 = Convert.ToInt32(Number1.Text); 
      int num2 = Convert.ToInt32(Number2.Text); 
      int result = 0; 
      string resultString = Convert.ToString(result); 

      if (Addition.Checked == true) 
      { 
       result = num1 + num2; 
       resultBox.Text = resultString; 
      } 
      else if (Subtraction.Checked == true) 
      { 
       result = num1 - num2; 
       resultBox.Text = resultString; 
      } 
      else if (Multiplication.Checked == true) 
      { 
       result = num1 * num2; 
       resultBox.Text = resultString; 
      } 
      else 
      { 
       resultBox.Text = "Error, no parameter selected"; 
      } 
     } 
    } 
} 

私はかなりそれが正しいと確信しています。私はC#(最初の日!)に新しいので、私はちょっと混乱しています。また、このウェブサイトで最初に投稿するので、フォーマット上の問題は残念です。「System.FormatException」エラーが発生していることがわかり、C#を使用してフォーム計算機を作成しようとしています

+2

ブレークポイントを追加してデバッグします。コードがエラーを生成する場所を確認できます。 –

+0

エラーはConvert.ToInt32にありますが、エラーを修正する方法は不明です。私が知る限り、文字列をintに変換して合計を計算し、それを文字列に戻します。 – Sean

+1

'Convert.ToInt32()'の代わりに 'try.Parse'を使用してみてください – MethodMan

答えて

2

それは数値に変換しようとして問題のように聞こえます。代わりにConvert.ToInt32()を使用するのではなく、TryParse()を試してみてください:あなたのコード内

int num1; 
int num2; 
bool isNum1Valid = int.TryParse(Number1.Text, out num1); 
bool isNum2Valid = int.TryParse(Number2.Text, out num2); 

if (!isNum1Valid) 
{ 
    // num1 is invalid. Throw an error message or something 
} 

if (!isNum2Valid) 
{ 
    // num2 is invalid. Throw an error message or something 
} 

あなたの他の問題は、その結果を解析する前に、あなたがResultStringを変換することです。あなたの計算を行った後、この行を使用します。

string resultString = result.ToString(); 
0

変換を試みる前に、ヌル値または空の値を必ず確認してください。

if(String.IsNullOrEmptry(Number2.Text)) 
    num2 = 0; 
else 
    num2 = Convert.ToInt32(Number2.Text); 

答えを「結果」に設定する前に、「結果」を「結果の文字列」に変換しています。移動する必要があります

resultBox.Text = resultString; 

if-elseブロックの下に移動します。

0

あなたは計算後string resultString = Convert.ToString(result);を置くべき

private void Calculate_Click(object sender, EventArgs e) 
     { 

      int num1 = Number1.Text==""?0:Convert.ToInt32(Number1.Text); 
      int num2 = Number2.Text==""?0:Convert.ToInt32(Number2.Text); 
      int result = 0; 


      if (Addition.Checked == true) 
      { 
       result = num1 + num2; 
      } 
      else if (Subtraction.Checked == true) 
      { 
       result = num1 - num2; 
      } 
      else if (Multiplication.Checked == true) 
      { 
       result = num1 * num2; 
      } 
      else 
      { 
       resultBox.Text = "Error, no parameter selected"; 
      } 
     string resultString = Convert.ToString(result); 
      resultBox.Text = resultString; 
     } 
0

Icemanindのソリューションは非常に良いですが、あなたは、ユーザーが最初(数値テキストボックスのようなもの)から間違った番号を入力することができないと考えることができます。いくつかの解決策がhereを示しています

private void FirstNumber_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    e.Handled = !char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar); 
} 

また、あなたがhereを示すように、それは、予期しない結果につながる可能性として、(簡単に十分な大きさの数字のためにInt32.MaxValueを乗り越えること*)溢れて検討する必要があります。

try 
{ 
    checked 
    { 
     // may be used for all operations 

     int product = num1 * num2; 
    } 
} 
catch(OverflowException ex) 
{ 
    resultBox.Text = "Integer operation overflow"; 
} 

または

Int64と宣言して、すべての可能な結果が得られることを確認してください。

したがって、テキストボックスに有効な数字があることはほぼ確実です。

+0

これは良いことです。テキストボックスのデフォルト値が0またはそれ以外の場合を除き、空の値を許可することができます。 – Icemanind

+0

はい、空をチェックする必要があります。また、ユーザーはどこからでも番号を貼り付けることができるため、解析の試行が必要です(貼り付けが無効になっている場合を除きます)。したがって、これはインターフェイスをより使いやすくするための補完的な答えと見なすべきです。 – Alexei

関連する問題