ネット記事やYouTubeなどを参考にしながら電卓作成を行っています。
しかし、参考にしている記事や動画では起こっていない(省かれている?)エラーが起きるため修正の仕方が分からず困っています。
エラーとしては、「ハンドルされていない例外」という文言でConvertを使ったコード部分に出てきます。
処理したい内容としては、2つあります。
1つ目は、テキストボックスに初期値として表示している「0」に対して、実際に計算を行う際に打ち込んだ数字の前に0がついたままになってしまう問題です。そのためそれを処理しようとするコードにConvertを使うとデバックの際にエラーとなります。
例:表示「0」→4のボタンを押す→表示「04」
この修正自体はできたが、Convertを使わない方法でコードを記入した。
2つ目は、演算子を使った計算処理の際に演算子を押す前に表示されていた数字を記憶し、演算子が押された後の数字と計算を行い、結果を表示するという部分で、Convertを使用せずにその処理を行う方法が分かりません。そのため1つ目の問題は解決できても、2つ目でまたConvertを使用せざるを得ずエラーが起こってしまいます。
まだはじめて一か月なのでわからないことだらけです。
皆様のお力を貸していただけたら幸いです。
コード:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 電卓_三号機
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool isFirst = true;
decimal 値1 = 0;
private void buttonNumber_Click(object sender, EventArgs e)
{
if (記号 != 四則演算の記号.未定義 && isFirst)
{
値1 = Convert.ToDecimal(textDisplay.Text);
textDisplay.Text = "";
isFirst = false;
}
if (textDisplay.Text.Equals("0"))
{
textDisplay.Text = ((Button)sender).Text;
}
else
{
textDisplay.Text = textDisplay.Text + ((Button)sender).Text;
}
}
private void buttonClaer_Click(object sender, EventArgs e)
{
textDisplay.Text = "";
}
//小数点クリック
private void buttonDot_Click(object sender, EventArgs e)
{
//小数点の重複チェック
if (textDisplay.Text.IndexOf(".") >= 0)
{
//既に小数点がある
return;
}
textDisplay.Text = textDisplay.Text + ".";
}
enum 四則演算の記号
{
未定義,ADD, SUB, MUL, DIV
};
四則演算の記号 記号;
private void buttonAdd_Click(object sender, EventArgs e)
{
記号 = 四則演算の記号.ADD;
isFirst = true;
}
private void buttonSub_Click(object sender, EventArgs e)
{
記号 = 四則演算の記号.SUB;
isFirst = true;
}
private void buttonMul_Click(object sender, EventArgs e)
{
記号 = 四則演算の記号.MUL;
isFirst = true;
}
private void buttonDiv_Click(object sender, EventArgs e)
{
記号 = 四則演算の記号.DIV;
isFirst = true;
}
private void buttonCalc_Click(object sender, EventArgs e)
{
decimal 値2 = Convert.ToDecimal(textDisplay.Text);
decimal 結果 = 0;
switch (記号)
{
case 四則演算の記号.ADD:
結果 = 値1 + 値2;
break;
case 四則演算の記号.SUB:
結果 = 値1 - 値2;
break;
case 四則演算の記号.MUL:
結果 = 値1 * 値2;
break;
case 四則演算の記号.DIV:
結果 = 値1 / 値2;
break;
}
textDisplay.Text = 結果.ToString();
}
}
}