C#初学

您所在的位置:网站首页 计算器如何直接混合计算 C#初学

C#初学

#C#初学| 来源: 网络整理| 查看: 265

需要学习C#编程。第一个任务就是制作一个简单的计算器。

首先新建一个C#窗体项目,

放置一个Label控件、TextBox控件和Button控件,作用分别是显示计算过程、显示计算结果、数字和运算符输入;

拖入控件时应对其属性进行设置,如笔者的按钮名称(Name属性)设置为“Button_0”,TextBox的TextAlign属性设置为Right(使文本右对齐)

窗体布局好的效果图如右图所示。

      

 

布置完窗体后,就开始对控件的事件写。我们可以对按钮单击事件的方法进行编写,双击按钮控件,默认进入单击(Click)事件,

在事件中可以写如下方法:

private void Button_0_Click(object sender, EventArgs e) { DispBox.Text += "0"; //笔者将TextBox控件命名为DispBox }

采用这种方式有个不好的地方,10个数字按钮将要写10个Click事件,因此采用另外一种方法:选中所有数字按钮,在属性窗口中选中事件,在Click事件中添加相应的方法,如笔者在Click事件中为所有数字添加一个buttonNum_Click方法。

    

接着在代码编辑窗口添加相应的处理方法,具体如下:

private void buttonNum_Click(object sender, EventArgs e) { if (sender == Button_0) { if (DispBox.Text.First() == '0' || state) DispBox.Text = "0"; //不显示00000123的情况,state作为一个文本框中是否有结果的标志 else if (!state) DispBox.Text += "0"; } else { clearbox(); //载入窗体后第一次按下数字时清除文本框内容 state = false; if (sender == Button_1) DispBox.Text += "1"; else if (sender == Button_2) DispBox.Text += "2"; else if (sender == Button_3) DispBox.Text += "3"; else if (sender == Button_4) DispBox.Text += "4"; else if (sender == Button_5) DispBox.Text += "5"; else if (sender == Button_6) DispBox.Text += "6"; else if (sender == Button_7) DispBox.Text += "7"; else if (sender == Button_8) DispBox.Text += "8"; else if (sender == Button_9) DispBox.Text += "9"; else if (sender == ButtonPi) { DispBox.Text = Convert.ToString(pi); state = true; } //单独按π键后显示π值,在下个事件触发时清除文本框显示 } }

处理完数字的单击事件后,接下来对运算符的单击事件进行处理。在这里笔者使用两个泛型列表,一个存放用户输入的数字,一个存放运算符,而在实际的操作中,要防止运算符在输完一个数字后被重复按下,因此使用了一些布尔变量作为“防呆”设置,具体定义如下:

private List value_list = new List();//存放用户输入的数字 private List op_list = new List(); //存放用户输入的运算符 private bool state = true;//true 表示只有一位0或文本框已有计算结果 private bool dot_flag = true; //false则小数点不能按下 //运算符防重复按下标志变量 private bool add_flag = false; private bool sub_flag = false; private bool mul_flag = false; private bool div_flag = false; private bool mod_flag = false; private bool result_flag = false;//=按钮状态标志 private bool op_state = false; //表示运算符是否可被操作

同样的方法,对“+”、“-”、“*”、“/”、“%”五个运算符进行单击事件方法的编写:

private void button_Op_Click(object sender, EventArgs e)   { state = true; if (sender == ButtonAdd && (!add_flag)) { value_list.Add(double.Parse(DispBox.Text)); op_list.Add('+'); add_flag = true; op_state = false; } else if (sender == ButtonSub && (!sub_flag)) { value_list.Add(double.Parse(DispBox.Text)); op_list.Add('-'); sub_flag = true; op_state = false; } else if (sender == ButtonMul && (!mul_flag)) { value_list.Add(double.Parse(DispBox.Text)); op_list.Add('*'); mul_flag = true; op_state = false; } else if (sender == ButtonDiv && (!div_flag)) { value_list.Add(double.Parse(DispBox.Text)); op_list.Add('/'); div_flag = true; op_state = false; } else if (sender == ButtonMod && (!mod_flag)) { value_list.Add(double.Parse(DispBox.Text)); op_list.Add('%'); mod_flag = true; op_state = false; } }

该事件仅仅对运算符的单击事件进行处理,但实际上对运算结果还未进行处理和显示,因此可以将处理这个过程的方法给“=”按钮的单击事件去处理:

private void ButtonResult_Click(object sender, EventArgs e) { //按 = 键时必须有运算符被按下 if ( op_list.Count > 0 && op_state) { value_list.Add(double.Parse(DispBox.Text)); double total = value_list[0]; for (int i = 0; i < op_list.Count; i++) { char op = op_list[i]; switch (op) { case '+': total += value_list[i + 1]; break; case '-': total -= value_list[i + 1]; break; case '*': total *= value_list[i + 1]; break; case '/': total /= value_list[i + 1]; break; case '%': total %= value_list[i + 1]; break; } } DispBox.Text = total + ""; op_list.Clear(); //清空累计的运算符和运算结果组的列表 value_list.Clear(); result_flag = true;//表示=按下 state = true; } }

好了,到此简单计算器(简单到没有运算符优先级功能)的大部分功能都已经能够实现,剩下的一些小功能的按钮,如1/x功能,主要要记得处理分母为0时的情况,“±”可滤除±0的情况。最终的初始界面如下图:

如当我输入 “ 145+999-666*12/33”时,得出的结果为173.81818181……

总结:本次简单计算器的制作只是笔者作为一个刚学习C#编程的菜鸟的练习,其中肯定有许多的不足和bug。在C#编程方面,笔者还有许许多多不了解的知识,希望老鸟勿喷,也希望有共同兴趣爱好的朋友能够相互交流,不吝赐教。

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3