namespace 计算器_新
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private bool Isok = true;//记录刚刚是否点过运算符,或是否第一次进入界面
private string Biaodashi; //记录运算符之前的表达式(在第一栏)
private decimal Sum;//记录之前计算的结果(在第二栏)
private string Preyunsuanfu;//记录之前的运算符
private void button27_Click(object sender, EventArgs e)//1按钮
{
Button btn = (Button)sender;
if (Isok)//刚刚点过运算符
{
textBox2.Text = btn.Text;
Isok = false;//累加的意思,不加的话他就不往后累加。
}
else
{
textBox2.Text = textBox2.Text + btn.Text;//后面的数不会消失而是会往后累加。
}
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
private void button25_Click(object sender, EventArgs e)//0建
{
Button btn = (Button)sender; //sender为各自对应的类,这里为对应每个按钮
if (Isok)
{
textBox2.Text = btn.Text; //0按钮后面不能叠加0,所以没有isok=falst.
}
else
{
textBox2.Text = textBox2.Text + btn.Text;//如果不是刚进入,之后的数字便一直加上刚才所点的按钮的内容
}
}
private void button8_Click(object sender, EventArgs e)//C按钮
{
//初始化所有状态
textBox1.Text = "";
textBox2.Text = "0";
Isok = true;
Preyunsuanfu = null;
Sum = 0;
Biaodashi = "";
}
private void button33_Click(object sender, EventArgs e)//加法按钮
{
Button btn = (Button)sender;//sender为各自对应的类,这里为对应每个按钮
string yunsuanfu = btn.Text; //将按钮上的内容赋值给yunsuanfu;
if (Preyunsuanfu == null)
{
Biaodashi = Biaodashi + textBox2.Text;
Sum = decimal.Parse(textBox2.Text);
}
else
{
if (!Isok) //如果刚刚点过运算符,这一块也就不需要运算了.反之则需要运算.
{ // !Isok 代表的是刚刚没点过运算符,这样才会运算下面的代码.
if (Preyunsuanfu == "+") //如果刚才的运算符是加号
{
Sum = Sum + decimal.Parse(textBox2.Text);//算出的结果就为之前算出来的加上刚点上去的
}
if (Preyunsuanfu == "-")
{
Sum = Sum - decimal.Parse(textBox2.Text);
}
if (Preyunsuanfu == "*")
{
Sum = Sum * decimal.Parse(textBox2.Text);
}
if (Preyunsuanfu == "/")
{
Sum = Sum / decimal.Parse(textBox2.Text);
}
if (Preyunsuanfu == "%")
{
Sum = Sum % decimal.Parse(textBox2.Text);
}
Biaodashi = Biaodashi + Preyunsuanfu + textBox2.Text;//之前有运算符的话 第一栏的值变为 之前的表达式+刚才点进去的运算符+刚才输入的值
textBox2.Text = Sum.ToString(); //第二栏的值变为结果
}
}
textBox1.Text = Biaodashi + yunsuanfu;//第一栏显示的文本为表达式+当前输入的运算符
Preyunsuanfu = yunsuanfu;//将yunsuanfu的值赋给 记录上一次的运算符;
Isok = true; //只要Isok是ture,就会把刚才的值清空重新输入现在按钮上的值
}
private void button9_Click(object sender, EventArgs e)//撤退
{
if (!Isok) //如果刚刚没点过运算符才能执行下面这一步
{
if (textBox2.Text.Length == 1)//如果第二栏的文本长度为1
{
textBox2.Text = "0"; //点击撤销就会变成0
Isok = true;//如果不加的话前面就一直有个零。
}
else
{
textBox2.Text = textBox2.Text.Substring(0, textBox2.Text.Length - 1);//如果是两位的话就撤销后面一位。
}
}
}
private void button34_Click(object sender, EventArgs e)//等号
{
textBox1.Text = ""; //第一栏为空
//计算之前的结果
if (Preyunsuanfu == "+") //如果刚才的运算符是加号
{
Sum = Sum + decimal.Parse(textBox2.Text);//算出的结果就为之前算出来的加上刚点上去的
}
if (Preyunsuanfu == "-")
{
Sum = Sum - decimal.Parse(textBox2.Text);
}
if (Preyunsuanfu == "*")
{
Sum = Sum * decimal.Parse(textBox2.Text);
}
if (Preyunsuanfu == "/")
{
Sum = Sum / decimal.Parse(textBox2.Text);
}
if (Preyunsuanfu == "%")
{
Sum = Sum % decimal.Parse(textBox2.Text);
}
textBox2.Text = Sum.ToString();//第二栏显示为之前的结果
//初始化对象
Isok = true;
Biaodashi = "";
Preyunsuanfu = null;
Sum = 0;
//还没有继续点等号出现的情况
}
private void button7_Click(object sender, EventArgs e)
{
if (!Isok) //不是刚点过运算符也不是刚进入界面,即如果是结果的话就不会执行下面的代码
{
if (decimal.Parse(textBox2.Text) > 0)
{
textBox2.Text = "-" + textBox2.Text;//如果大于零就添加负号
}
else
{
textBox2.Text = textBox2.Text.Substring(1);//如果小于零就把负号去掉
}
}
}
private void button32_Click(object sender, EventArgs e)//小数点
{
if (textBox2.Text == "0")//如果是零的话
{
textBox2.Text = "0.";//就变成0.
Isok = false;//将Isok改成false是为了本来是0的话点了小数点之后还可以再继续在小数点后面输入别的数字,而不是清空
}
if (!Isok && !textBox2.Text.Contains("."))//如果显示的是结果框(即刚点过运算符便不让点),便不会执行下一步;并且刚刚点过. ,也不会执行
{
textBox2.Text = textBox2.Text + ".";
}
}