C#を使って何か作ろう~電卓その3~
困っている。
電卓に計算履歴を表示させたいのだが、どうやっても「1+1」が「+11」と表示される。
なんなんだマジで…
とりあえず、過去の電卓だと「=」を押した後に数値を入れると
計算結果の数値に入力した数値が追加されていってしまうので、
「=」を押した後に数値が入力されると一度リセットするロジックをつっこんだ。
計算履歴は明日以降…
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 Calculator { public partial class Form1 : Form { double val1 = 0; double val2 = 0; int calcflug = 0; string CalcHistroty; public Form1() { InitializeComponent(); } public void EnteringKey(int i) { if (display.Text == "0") { display.Text = ""; } if(calcflug == 5)//めっちゃ苦戦した { display.Text = ""; calcflug = 0; } display.Text += i; //CalcHistroty = CalcHistroty + i.ToString(); //Console.WriteLine(CalcHistroty); } public void gettoval() { val2 = double.Parse(display.Text); CalcHistroty += val2.ToString(); Console.WriteLine(CalcHistroty); calcnow(val2); display.Text = "0"; } public void gettoval(int i)//オーバーロード { val2 = double.Parse(display.Text); CalcHistroty += val2.ToString(); Console.WriteLine(CalcHistroty); calcnow(val2); Console.WriteLine(CalcHistroty); display.Text = "0"; calcflug = i; } private void zero_Click(object sender, EventArgs e) { EnteringKey(0); } private void one_Click(object sender, EventArgs e) { EnteringKey(1); } private void two_Click(object sender, EventArgs e) { EnteringKey(2); } private void three_Click(object sender, EventArgs e) { EnteringKey(3); } private void four_Click(object sender, EventArgs e) { EnteringKey(4); } private void five_Click(object sender, EventArgs e) { EnteringKey(5); } private void six_Click(object sender, EventArgs e) { EnteringKey(6); } private void seven_Click(object sender, EventArgs e) { EnteringKey(7); } private void eight_Click(object sender, EventArgs e) { EnteringKey(8); } private void nine_Click(object sender, EventArgs e) { EnteringKey(9); } private void plusminus_Click(object sender, EventArgs e) { if (int.Parse(display.Text) != 0) { double num = double.Parse(display.Text) * -1; display.Text = num.ToString(); } } private void dot_Click(object sender, EventArgs e) { if (display.Text.IndexOf(".") == -1) { display.Text += "."; } } private void add_Click(object sender, EventArgs e) { gettoval(1); } private void substract_Click(object sender, EventArgs e) { gettoval(2); } private void multiply_Click(object sender, EventArgs e) { gettoval(3); } private void divide_Click(object sender, EventArgs e) { gettoval(4); } private void equal_Click(object sender, EventArgs e) { gettoval(); display.Text = val1.ToString(); calcflug = 5; CalcHistories.Items.Add(CalcHistroty); //CalcHistroty = ""; } private void allclear_Click(object sender, EventArgs e) { display.Text = "0"; //CalcHistroty = ""; } public void calcnow(double val2) { switch (calcflug) { case 0: val1 = val2; break; case 1: val1 += val2; CalcHistroty += "+"; Console.WriteLine(CalcHistroty); break; case 2: val1 -= val2; CalcHistroty += "-"; //Console.WriteLine(CalcHistroty); break; case 3: val1 *= val2; CalcHistroty += "*"; //Console.WriteLine(CalcHistroty); break; case 4: val1 /= val2; CalcHistroty += "/"; //Console.WriteLine(CalcHistroty); break; } val2 = 0; calcflug = 0; } private void Form1_KeyDown(object sender, KeyEventArgs e) { switch (e.KeyCode) { case Keys.NumPad0: zero_Click(sender, e); break; case Keys.NumPad1: one_Click(sender,e); break; case Keys.NumPad2: two_Click(sender, e); break; case Keys.NumPad3: three_Click(sender, e); break; case Keys.NumPad4: four_Click(sender, e); break; case Keys.NumPad5: five_Click(sender, e); break; case Keys.NumPad6: six_Click(sender, e); break; case Keys.NumPad7: seven_Click(sender, e); break; case Keys.NumPad8: eight_Click(sender, e); break; case Keys.NumPad9: nine_Click(sender, e); break; case Keys.Add: add_Click(sender, e); break; case Keys.Subtract: substract_Click(sender, e); break; case Keys.Multiply: multiply_Click(sender, e); break; case Keys.Divide: divide_Click(sender, e); break; case Keys.Decimal: dot_Click(sender, e); break; case Keys.Enter: equal_Click(sender, e); break; case Keys.Delete: allclear_Click(sender, e); break; } } private void Form1_Load(object sender, EventArgs e) { } } }