C#动态生成简便计算器

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Windows.Forms;
  9 
 10 namespace 计算器
 11 {
 12     public partial class Form2 : Form
 13     {
 14         public Form2()
 15         {
 16             InitializeComponent();
 17         }
 18         Point p;
 19         Point pp;
 20         private void Form2_Load(object sender, EventArgs e)
 21         {
 22             Button btn;
 23             Label lbl = new Label();
 24             lbl.Name = "lblname";
 25             lbl.Location = new Point(50,10);//定位置
 26             lbl.Size = new Size(250,30);//定尺寸
 27             TextBox txt = new TextBox();
 28             txt.Name = "txtName";
 29             txt.BorderStyle = BorderStyle.FixedSingle;//设置样式
 30             txt.Location = new Point(50,30);
 31             txt.Size = new Size(250,50);
 32             txt.Multiline = true;//设置为多行文本框
 33             Button btn0 = new Button();
 34             btn0.SetBounds(p.X+50,p.Y+230,150,50);//设置位置和尺寸
 35             btn0.Tag = 0;
 36             btn0.Visible = true;
 37             btn0.Text = 0 + "";
 38             btn0.Click += new EventHandler(btn_Click);//手动添加事件
 39             Button btnJ = new Button();
 40             btnJ.SetBounds(p.X+200,p.Y+80,50,50);
 41             btnJ.Tag = "+";
 42             btnJ.Text = "+";
 43             btnJ.Click += new EventHandler(btn_Click);
 44             Button btnJan = new Button();
 45             btnJan.SetBounds(p.X + 200, p.Y + 130, 50, 50);
 46             btnJan.Tag = "-";
 47             btnJan.Text = "-";
 48             btnJan.Click += new EventHandler(btn_Click);
 49             Button btnC = new Button();
 50             btnC.SetBounds(p.X + 200, p.Y + 180, 50, 50);
 51             btnC.Tag = "*";
 52             btnC.Text = "*";
 53             btnC.Click += new EventHandler(btn_Click);
 54             Button btnChu = new Button();
 55             btnChu.SetBounds(p.X + 200, p.Y + 230, 50, 50);
 56             btnChu.Tag = "/";
 57             btnChu.Text = "/";
 58             btnChu.Click += new EventHandler(btn_Click);
 59             Button btnQ = new Button();
 60             btnQ.SetBounds(p.X + 250, p.Y + 80, 50, 50);
 61             btnQ.Tag = "C";
 62             btnQ.Text = "C";
 63             btnQ.Click += new EventHandler(btn_Click);
 64             Button btnD = new Button();
 65             btnD.SetBounds(p.X + 250, p.Y + 130, 50, 150);
 66             btnD.Tag = "=";
 67             btnD.Text = "=";
 68             btnD.Click += new EventHandler(btn_Click);
 69             for (int i = 1; i <=9; i++)
 70             {
 71                 btn = new Button();
 72                 btn.SetBounds(p.X+50, p.Y+80, 50, 50);
 73                 btn.Text = i+"";
 74                 btn.Tag = i ;
 75                 btn.Visible = true;
 76                 btn.Click += new EventHandler(btn_Click);
 77                 this.Controls.Add(btn);
 78                 p.X += 50;
 79                 if (p.X >= 150)//如果横向尺寸大于150,那么就换行(3个按钮刚好150尺寸)
 80                 {
 81                     p.X = 0;
 82                     p.Y += 50;//纵向移动
 83                 }
 84             }
 85             this.Controls.Add(txt);//在面板中添加文本框
 86             this.Controls.Add(btn0);//添加按钮0
 87             this.Controls.Add(btnJ);//添加+加号按钮
 88             this.Controls.Add(btnJan);//添加-减号按钮
 89             this.Controls.Add(btnC);//添加*乘法按钮
 90             this.Controls.Add(btnChu);//添加/除法按钮
 91             this.Controls.Add(btnQ);//添加C清空按钮
 92             this.Controls.Add(btnD);//添加=号按钮
 93             this.Controls.Add(lbl);//添加lable
 94         }
 95         private void btn_Click(object sender, EventArgs e)
 96         {
 97            
 98             Button btn = (Button)sender;
 99             /*linq写法*/
100             string str = this.Controls.OfType<TextBox>().Single(item => item.Name == "txtName").Text;
101             string str1 = this.Controls.OfType<Label>().Single(item => item.Name == "lblname").Text;
102             /*一般的写法*/
103             TextBox txt = this.Controls.Find("txtName", true)[0] as TextBox;
104             Label lbl = this.Controls.Find("lblname", true)[0] as Label;
105             str1+=btn.Tag.ToString();
106             lbl.Text = str1;
107             if (str1.IndexOf('=') != -1)//如果字符里面有=号
108             {
109                 str1 = str1.Substring(0,str1.Length-1);//把=号截取掉
110 
111                 if (str1.IndexOf('+') != -1)//如果剩下的字符串里面有+号
112                 {
113                     string[] nums = str1.Split('+');//把+号的前后字符串分割并装到数组
114                     int sum = 0;
115                     foreach (var num in nums)//循环遍历数组
116                     {
117                         sum += Convert.ToInt32(num);
118                     }
119                     txt.Text = sum.ToString();//文本框获得结果
120                     lbl.Text = "";//清空lable里的内容
121                 }
122                  if (str1.IndexOf('-') != -1)
123                 {
124                     string[] nums = str1.Split('-');
125                     int subtr = 0;
126                     foreach (var num in nums)
127                     {
128                         subtr -= Convert.ToInt32(num);
129                     }
130                     txt.Text = subtr.ToString();
131                     lbl.Text = "";
132                 }
133                 if (str1.IndexOf('*') != -1)
134                 {
135                     string[] nums = str1.Split('*');
136                     int mult = 1;
137                     foreach (var num in nums)
138                     {
139                         mult *= Convert.ToInt32(num);
140                     }
141                     txt.Text = mult.ToString();
142                     lbl.Text = "";
143                 }
144                 if (str1.IndexOf('/') != -1)
145                 {
146                     string[] nums = str1.Split('/');
147                     int division = 1;
148                     for (int i = 0; i < nums.Length-1; i++)
149                     { 
150                         division= Convert.ToInt32(nums[i])/Convert.ToInt32(nums[nums.Length-1]);
151                     }
152                         //foreach (var num in nums)
153                         //{
154                         //     division /= Convert.ToInt32(num);
155                         //}
156                         txt.Text = division.ToString();
157                     lbl.Text = "";
158                 }
159             }
160             if (str1.IndexOf('C') != -1)
161             {
162                 lbl.Text = "";
163                 txt.Text = "";
164             }
165            
166           
167 
168 
169           // MessageBox.Show(str);
170         }
171     }
172 }

 

posted @ 2013-05-27 14:43  宁静思远  阅读(252)  评论(0编辑  收藏  举报