2008/11/20(Thu) 16:48:09 編集(投稿者)
一応全体のコードを載せてみます。
namespace 計算機VS2008
{
public partial class Form1 : Form
{
double dData1 = 0; //数値1を記憶する
double dData2 = 0; //数値2を記憶しているかどうか?
Boolean SuuFlag; //数字キー用
Boolean EFlag; //演算キー用
int Enzan; //演算種類記憶用(+:0,-:1,*:2,/:3,=:4,)
const int NONE = -1;
const int TASU = 0;
const int HIKU = 1;
const int KAKERU = 2;
const int WARU = 3;
const int EQU = 4;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
txtDisp.Text = "0";
dData1 = 0; //数値記憶用変数の初期化
dData2 = 0;
Enzan = NONE; //演算種類初期化
SuuFlag = false;
EFlag = false;
}
//「C」ボタン
private void btnClear_Click(object sender, EventArgs e)
{
txtDisp.Text = "0";
dData1 = 0;
dData2 = 0;
SuuFlag = false;
EFlag = false;
}
//「+」ボタン
private void btnPlus_Click(object sender, EventArgs e)
{
SetMemory(0);
}
//「-」ボタン
private void btnMin_Click(object sender, EventArgs e)
{
SetMemory(1);
}
//「×」ボタン
private void btnMil_Click(object sender, EventArgs e)
{
SetMemory(2);
}
//「÷」ボタン
private void btnDiv_Click(object sender, EventArgs e)
{
SetMemory(3);
}
//「=」ボタン
private void btnEqual_Click(object sender, EventArgs e)
{
SetMemory(4);
}
//演算キー
private void SetMemory(int nSet)
{
//数字キーを押した後
if (SuuFlag == true)
{
if (EFlag == false)
{
dData1 = double.Parse(txtDisp.Text); //1つ目の数値記憶
EFlag = true;
}
else
{
dData2 = double.Parse(txtDisp.Text); //2つ目の数値記憶
}
if (nSet != EQU) //=以外の時
{
keisan();
Enzan = nSet;
dData2 = 0;
}
else
{
keisan();
EFlag = false;
}
txtDisp.Text = dData1.ToString().Trim();
}
else if (nSet == EQU) //等号キーを押した後
{
if (dData2 == 0)
{
dData2 = dData1;
}
txtDisp.Text = dData1.ToString().Trim();
EFlag = false;
}
else //四則演算キーを押した後
{
dData1 = double.Parse(txtDisp.Text);
dData2 = 0;
Enzan = nSet;
EFlag = true;
}
SuuFlag = false;
}
//四則演算
private void keisan()
{
if (Enzan == TASU) //加算
{
dData1 = dData1 + dData2;
}
else if (Enzan == HIKU) //減算
{
dData1 = dData1 - dData2;
}
else if (Enzan == KAKERU) //乗算
{
dData1 = dData1 * dData2;
}
else if (Enzan == WARU) //除算
{
if (dData2 != 0)
{
dData1 = dData1 / dData2;
}
else
{
MessageBox.Show("われません");
}
}
}
//「.」小数点ボタン
private void btnpoint_Click(object sender, EventArgs e)
{
int point;
point = txtDisp.Text.IndexOf(".");
if (point > 0) //小数点が既にあるのか
{
return;
}
else //小数点がない時追加
{
txtDisp.Text = txtDisp.Text += ".";
}
}
//「+/-」ボタン
private void btnHanten_Click(object sender, EventArgs e)
{
if (txtDisp.Text.Substring(0, 1) == "-")
{
txtDisp.Text = txtDisp.Text.Remove(0, 1);
}
else
{
txtDisp.Text = "-" + txtDisp.Text;
}
}
//「0〜9」の数字ボタン
private void btn_Click(object sender, EventArgs e)
{
if (txtDisp.Text == "これ以上無理!")
{
return;
}
if (txtDisp.Text == "0" || SuuFlag == false)
{
txtDisp.Text = "";
dData2 = 0;
}
if (txtDisp.Text == "0")
{
txtDisp.Text = "";
}
if (txtDisp.Text == "0")
{
txtDisp.Text = (((System.Windows.Forms.Button)sender).Text);
}
else
{
txtDisp.Text = txtDisp.Text += (((System.Windows.Forms.Button)sender).Text);
}
SuuFlag = true;
int nlen = txtDisp.TextLength;
if (nlen > 12) //ディスプレイに10桁以上入力された時
{
txtDisp.Text = "これ以上無理!";
}
}
//「BackSpace」ボタン
private void btnBackSpace_Click(object sender, EventArgs e)
{
int nLen = txtDisp.Text.Length;
if (nLen != 1)
{
txtDisp.Text = txtDisp.Text.Remove(nLen - 1, 1);
}
else if (nLen == 1)
{
txtDisp.Text = txtDisp.Text.Remove(0, 1);
}
if ((nLen == 1) || (txtDisp.Text == "-"))
{
txtDisp.Text = "0";
}
}
}
}