6. 簡易計算器
using System.Diagnostics.CodeAnalysis;
namespace Q6
{
public partial class Form1 : Form
{
List<string> ops = new List<string>();
void add(char k)
{
if (Char.IsDigit(k))
{
if (ops.Count == 0 || !Char.IsDigit(ops.Last()[0]))
{
ops.Add("");
}
ops[ops.Count - 1] += k;
label1.Text = ops.Last();
}
else
{
if (!Char.IsDigit(ops.Last()[0])) ops.RemoveAt(ops.Count - 1);
ops.Add(k.ToString());
}
}
public Form1()
{
InitializeComponent();
var size = 60;
for (int i = 0; i < 9; i++)
{
int x = i % 3;
int y = i / 3;
Button btn = new Button();
btn.Left = 10 + size * x;
btn.Top = 50 + size * (2 - y);
btn.Width = size;
btn.Height = size;
btn.BackColor = Color.White;
btn.Text = "" + (i + 1);
var ic = i + 1;
btn.Click += (s, c) =>
{
add(ic.ToString()[0]);
};
Controls.Add(btn);
}
{
Button btn = new Button();
btn.Left = 10 + size * 0;
btn.Top = 50 + size * 3;
btn.Width = size;
btn.Height = size;
btn.BackColor = Color.White;
btn.Text = "" + "+/-";
btn.Click += (s, c) =>
{
var last = ops.Last();
ops[ops.Count - 1] =
last.StartsWith("-") ? last[1..] :
("-" + last);
label1.Text = ops.Last();
};
Controls.Add(btn);
btn = new Button();
btn.Left = 10 + size * 1;
btn.Top = 50 + size * 3;
btn.Width = size;
btn.Height = size;
btn.BackColor = Color.White;
btn.Text = "" + (0);
btn.Click += (s, c) =>
{
add('0');
};
Controls.Add(btn);
btn = new Button();
btn.Left = 10 + size * 2;
btn.Top = 50 + size * 3;
btn.Width = size;
btn.Height = size;
btn.BackColor = Color.White;
btn.Text = "" + ".";
btn.Click += (c, s) =>
{
add('.');
};
Controls.Add(btn);
}
{
Button btn = new Button();
btn.Left = 10 + size * 4;
btn.Top = 50 + size * 0;
btn.Width = size;
btn.Height = size;
btn.BackColor = Color.White;
btn.Text = "Log";
btn.Click += (s, c) =>
{
label1.Text = Math.Log10(int.Parse(label1.Text)).ToString();
};
Controls.Add(btn);
btn = new Button();
btn.Left = 10 + size * 5;
btn.Top = 50 + size * 0;
btn.Width = size;
btn.Height = size;
btn.BackColor = Color.White;
btn.Text = "AC";
btn.Click += (s, c) =>
{
ops.Clear();
label1.Text = "";
};
Controls.Add(btn);
}
{
Button btn = new Button();
btn.Left = 10 + size * 4;
btn.Top = 50 + size * 1;
btn.Width = size;
btn.Height = size;
btn.BackColor = Color.White;
btn.Text = "+";
btn.Click += (s, c) =>
{
add('+');
};
Controls.Add(btn);
btn = new Button();
btn.Left = 10 + size * 5;
btn.Top = 50 + size * 1;
btn.Width = size;
btn.Height = size;
btn.BackColor = Color.White;
btn.Text = "×";
btn.Click += (s, c) =>
{
add('x');
};
Controls.Add(btn);
}
{
Button btn = new Button();
btn.Left = 10 + size * 4;
btn.Top = 50 + size * 2;
btn.Width = size;
btn.Height = size;
btn.BackColor = Color.White;
btn.Text = "-";
btn.Click += (s, c) =>
{
add('-');
};
Controls.Add(btn);
btn = new Button();
btn.Left = 10 + size * 5;
btn.Top = 50 + size * 2;
btn.Width = size;
btn.Height = size;
btn.BackColor = Color.White;
btn.Text = "/";
btn.Click += (s, c) =>
{
add('/');
};
Controls.Add(btn);
}
{
Button btn = new Button();
btn.Left = 10 + size * 4;
btn.Top = 50 + size * 3;
btn.Width = 2 * size;
btn.Height = size;
btn.BackColor = Color.White;
btn.Text = "=";
btn.Click += (s, c) =>
{
var a = double.Parse(ops.First());
var b = double.Parse(ops[2]);
switch (ops[1])
{
case "+":
label1.Text = (a + b).ToString();
break;
case "-":
label1.Text = (a - b).ToString();
break;
case "x":
label1.Text = (a * b).ToString();
break;
case "/":
label1.Text = (a / b).ToString();
break;
}
ops.Clear();
ops.Add(label1.Text);
};
Controls.Add(btn);
}
}
}
}
Last updated