标题:
Visual studio c#简易计算器例程
[打印本页]
作者:
540750247
时间:
2017-10-15 11:26
标题:
Visual studio c#简易计算器例程
如题。计算器的运行界面如下:
0.png
(70.6 KB, 下载次数: 65)
下载附件
2017-10-15 23:54 上传
所有资料51hei提供下载:
Calculators.rar
(63.24 KB, 下载次数: 29)
2017-10-15 11:26 上传
点击文件名下载附件
下载积分: 黑币 -5
Visual studio c#计算器源程序如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Collections;
namespace Calculators
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void ShowAsStandard()//“标准型”模式
{
groupT.Location = new Point(6, 78);//groupT中存放标准型模式下的按钮控件
txtEnterBox.Size = new Size(250, 23);
txtExpression.Size = new Size(250, 14);
groupShowWindow.Size = new Size(260, 49);
groupS.Location = new Point(-333, 77);//groupT中存放科学型模式下特有的按钮控件
this.Size = new Size(290, 349);
}
private void ShowAsScience()//“科学型”模式
{
groupT.Location = new Point(268, 78);
txtEnterBox.Size = new Size(511, 23);
txtExpression.Size = new Size(511, 14);
groupShowWindow.Size = new Size(517, 49);
groupS.Location = new Point(3, 77);
this.Size = new Size(551, 349);
}
private void Form1_Load(object sender, EventArgs e)
{
//界面初始化为“标准型”的样子
ShowAsStandard();
}
//================标志================================================
private Expression leftValue = null;//左操作数
bool txtEnterBoxClearFlag = true;//是否清除txtEnterBox的标志,是否可启用backspace的标志
bool txtExpressionClearFlag = true;//是否清除txtExpression的标志
bool txtExpressionInsertFlag = true;//是否在txtExpression中插入新数据的标志
bool btnBackSpaceEnableFlag = true;//是否启用BackSpace键
//====================================================================
string op;//操作符
Expression expression = null;//表达式对象
private void btn0_Click(object sender, EventArgs e)//数字及点号按钮被按下时触发该事件
{
Button btn = sender as Button;
if (txtEnterBoxClearFlag)
{
txtEnterBox.Clear();
}
if (txtExpressionClearFlag)
{
txtExpression.Clear();
}
txtEnterBox.Text += btn.Text;
txtEnterBoxClearFlag = false;
txtExpressionClearFlag = false;
btnBackSpaceEnableFlag = true;
}
private void buttonClear_Click(object sender, EventArgs e)
{
#region 清除数字显示框、表达式显示框及左操作数
txtEnterBox.Text = "0";
txtExpression.Text = "";
leftValue = null;//左操作数清空
#endregion
}
private void txtEnterBox_TextChanged(object sender, EventArgs e)
{
#region 检查输入数字是否规范
if (Regex.IsMatch(txtEnterBox.Text, "^[0]+[1-9]+")) //1.非小数数字不能以0开头。
{
txtEnterBox.Text = Regex.Replace(txtEnterBox.Text, "^0+", "");
}
if (Regex.IsMatch(txtEnterBox.Text, "^0+"))//2.数字开头不能连续输入多个0,最多只能输入一个
{
txtEnterBox.Text = Regex.Replace(txtEnterBox.Text, "^0+", "0");
}
if (Regex.IsMatch(txtEnterBox.Text, "[.].*[.]"))//3.数字中小数点个数不能超过1
{
txtEnterBox.Text = Regex.Replace(txtEnterBox.Text, "[.]{1}$", "");
}
#endregion
}
private void btnNegative_Click(object sender, EventArgs e)
{
#region 将输入框中的数字乘以-1
double dTemp = Convert.ToDouble(txtEnterBox.Text);
dTemp = dTemp * (-1);
txtEnterBox.Text = dTemp.ToString();
#endregion
}
private void btnAdd_Click(object sender, EventArgs e)//双目运算符:加减乘除、取余按钮按下时触发该事件
{
Button btn = sender as Button;
if (txtExpressionInsertFlag)
{
txtExpression.Text += txtEnterBox.Text + btn.Text;//表达式显示控件添加数值输入控件中的值和操作符的值
}
else
{
txtExpression.Text += btn.Text;//表达式显示控件仅添加操作符的值
}
if (leftValue == null)
{
leftValue = new Constant(Convert.ToDouble(txtEnterBox.Text));//创建左操作数
}
else
{
Constant RightVaue = new Constant(Convert.ToDouble(txtEnterBox.Text));//创建右操作数
expression = new Operation(leftValue, op, RightVaue);//创建表达式
leftValue = expression;//将表达式赋值给左操作数
txtEnterBox.Text = expression.Evaluate().ToString();//数值输入控件显示当前计算值
}
op = btn.Text;//更新操作符
txtEnterBoxClearFlag = true;
txtExpressionClearFlag = false;
txtExpressionInsertFlag = true;
btnBackSpaceEnableFlag = false;
}
private void btnEvaluate_Click(object sender, EventArgs e)//按下等于号按钮
{
if (leftValue != null)
{
Constant RightVaue = new Constant(Convert.ToDouble(txtEnterBox.Text));//创建右操作数
expression = new Operation(leftValue, op, RightVaue);//创建表达式
leftValue = null;//清空左操作数
txtEnterBox.Text = expression.Evaluate().ToString();
}
else
{
leftValue = new Constant(Convert.ToDouble(txtEnterBox.Text));//创建左操作数
}
txtExpression.Clear();
txtEnterBoxClearFlag = true;
btnBackSpaceEnableFlag = false;
}
private void btnSqrt_Click(object sender, EventArgs e)//单目运算符:计算平方根,求倒数按钮按下时触发该事件
{
Button btn = sender as Button;
txtExpression.Text +=(string)btn.Tag+ "(" + txtEnterBox.Text + ")";//表达式显示控件显示当前表达式
leftValue = new Constant(Convert.ToDouble(txtEnterBox.Text));//创建左操作数
expression = new Operation(leftValue, btn.Text, null);//创建表达式
leftValue = null;
txtEnterBox.Text = expression.Evaluate().ToString();
txtEnterBoxClearFlag = true;
txtExpressionClearFlag = true;
txtExpressionInsertFlag = false;
btnBackSpaceEnableFlag = false;
}
private void btnBackSpace_Click(object sender, EventArgs e)
{
if (btnBackSpaceEnableFlag)
{
int strLength = txtEnterBox.Text.Length;
if (strLength==1)
{
txtEnterBox.Text = "0";//只剩一个字符时,将该字符修改为0
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1