8.8.1 简易计算器
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的
【例 8.64】【项目:code8-064】一个简易计算器。
先考虑计算器的设计,窗体上控件的摆放可以参考windows自带的最基本那种计算器。下图是计算器控件摆放:
图8-107 计算器控件摆放
控件命名:
表8-1 计算器控件名称
控件名称 | 控件类型 | 文本 | 控件名称 | 控件类型 | 文本 |
txtValue | TextBox | 0 | btnClear | Button | C |
btnBack | Button | <- | btnSquare | Button | X^2 |
btnAdd | Button | + | btnSub | Button | - |
btnMul | Button | / | btnDiv | Button | * |
btnNegPos | Button | +/- | btnDot | Button | . |
btnEqual | Button | = | btnNum0-9 | Button | 0-9 |
txtValue的readonly属性设置为True;按钮的FlatStyle属性设置为Popup。
考虑到加减乘除运算符操作时差不多,所以合并使用一个事件,请在“Form1.Designer.cs”内添加或修改成如下内容:
this.btnDiv.Click += new System.EventHandler(this.btnAdd_Click);
this.btnMul.Click += new System.EventHandler(this.btnAdd_Click);
this.btnSub.Click += new System.EventHandler(this.btnAdd_Click);
this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);
同样,按下数字按键操作差不多,所以合并使用同一个事件,请在“Form1.Designer.cs”内添加或修改成如下内容:
this.btnNum1.Click += new System.EventHandler(this.btnNum1_Click);
this.btnNum2.Click += new System.EventHandler(this.btnNum1_Click);
……
具体代码如下:
//做运算的第一个数字
Double numFirst;
//做运算的第二个数字
Double numSecond;
//运算符号
string operatesymbol;
//当前是否做了计算
bool blHasCalculate;
//当前是否按下运算符
bool blHasOperator;
private void Form1_Load(object sender, EventArgs e)
{
blHasCalculate = false;
blHasOperator = false;
}
//清除计算结果
private void btnClear_Click(object sender, EventArgs e)
{
txtValue.Text = "0";
operatesymbol = "";
blHasCalculate = false;
blHasOperator = false;
}
//删除最后一个数字
private void btnBack_Click(object sender, EventArgs e)
{
if (txtValue.Text.Length == 1)
txtValue.Text = "0";
else if (txtValue.Text.Length > 1)
txtValue.Text = txtValue.Text.Substring(0, txtValue.Text.Length - 1);
}
//按下平方按钮
private void btnSquare_Click(object sender, EventArgs e)
{
Button btnclick = (Button)sender;
numFirst = Double.Parse(txtValue.Text);
Double dbValue;
dbValue = numFirst * numFirst;
string strValue = dbValue.ToString();
txtValue.Text = strValue;
blHasCalculate = true;
blHasOperator = false;
}
//按下运算符按钮
private void btnAdd_Click(object sender, EventArgs e)
{
Button btnclick = (Button)sender;
if (blHasOperator == false)
{
numFirst = Double.Parse(txtValue.Text);
operatesymbol = btnclick.Text;
txtValue.Text = "0";
blHasOperator = true;
}
else
MessageBox.Show("请先按下等于号后继续计算");
}
//按下正负号按钮
private void btnNegPos_Click(object sender, EventArgs e)
{
if (txtValue.Text.Substring(0, 1) == "-")
txtValue.Text = txtValue.Text.Substring(1, txtValue.Text.Length - 1);
else
txtValue.Text = "-" + txtValue.Text;
}
//按下小数点
private void btnDot_Click(object sender, EventArgs e)
{
if(txtValue.Text.IndexOf('.')<0)
txtValue.Text += ".";
}
//按下等于按钮
private void btnEqual_Click(object sender, EventArgs e)
{
numSecond = Double.Parse(txtValue.Text);
Double dbValue=0;
switch(operatesymbol)
{
case "+":
dbValue = numFirst + numSecond;
break;
case "-":
dbValue = numFirst - numSecond;
break;
case "*":
dbValue = numFirst * numSecond;
break;
case "/":
if( numSecond == 0)
{
MessageBox.Show("除数不能为0!");
return;
}
dbValue = numFirst / numSecond;
break;
default:
break;
}
blHasCalculate = true;
blHasOperator = false;
string strValue = dbValue.ToString();
txtValue.Text = strValue;
}
//按下数字按钮
private void btnNum1_Click(object sender, EventArgs e)
{
Button btnclick = (Button)sender;
string addnumber = btnclick.Text;
switch(txtValue.Text)
{
case "0":
txtValue.Text = addnumber;
break;
case "-0":
txtValue.Text = "-" + addnumber;
break;
default:
if (blHasCalculate == true)
{
txtValue.Text = addnumber;
blHasCalculate = false;
}
else
txtValue.Text += addnumber;
break;
}
}
学习更多vb.net知识,请参看vb.net 教程 目录
学习更多C#知识,请参看C#教程 目录