加法计算器:
界面:
代码:
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 Form1 : Form
13 {
14 public Form1()
15 {
16 InitializeComponent();
17 }
18
19 private void btnEqual_Click(object sender, EventArgs e)
20 {
21 string strNumber1 = txtNumber1.Text;
22 string strNumber2 = txtNumber2.Text;
23 int intNumber1;
24 int intNumber2;
25 if (!int.TryParse(strNumber1, out intNumber1))
26 {
27 MessageBox.Show("第一个数字为非法值,请重新输入正确的数字");
28 return;
29 }
30 else
31 {
32 if (!int.TryParse(strNumber2, out intNumber2))
33 {
34 MessageBox.Show("第二个数字为非法值,请重新输入正确的数字");
35 return;
36 }
37 else
38 {
39 txtResult.Text = (intNumber1 + intNumber2).ToString();
40 }
41 }
42 }
43 }
44 }
分析:
其中第25行代码有必要分析下:
if (!int.TryParse(strNumber1, out intNumber1))
TryParse()是int类型的静态方法,其中第一个参数strNumber1是一个string类型,第二个参数intNumber1是一个int类型。并且第二个参数是out输出参数。而该方法本身返回一个bool类型的值。
我们可以把25行的代码改写成:
if (int.TryParse(strNumber1, out intNumber1)==false)
改写过后的代码和源代码是等价的。其实它的意思就是将strNumber1这个字符串变量转换成intNumber1这个整型变量。如果转换成功则返回true,转换失败返回false。
这里的第25行代码表示的是转换失败的情况:if (int.TryParse(strNumber1, out intNumber1)==false)
那么这样一来结果就是false==false,最后等于true,就是if(true),则会执行if语句块中的代码。
同理,如果是转换成功的情况:if (int.TryParse(strNumber1, out intNumber1)==true)
那么结果就是true==true,最后还是等于true,就是if(true),同样会执行if语句块中的代码。
综上所述,那么这两种情况的代码就可简写为:
if (!int.TryParse(strNumber1, out intNumber1))
这里的int.TryParse(strNumber1, out intNumber1)的结果是false
if (int.TryParse(strNumber1, out intNumber1))
这里的int.TryParse(strNumber1, out intNumber1)的结果是true
字符串分割方法Split运用:
界面:
代码:
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 _1__winform程序_字符串分割运用
11 {
12 public partial class Form1 : Form
13 {
14 public Form1()
15 {
16 InitializeComponent();
17 }
18
19 private void btnAnalysis_Click(object sender, EventArgs e)
20 {
21 string strEmail = txtEmail.Text;
22 string[] strResult = strEmail.Split('@');
23 if (strResult.Length != 2)
24 {
25 MessageBox.Show("你所输入的Email地址有错,请重新输入!");
26 return;
27 }
28 txtUserName.Text = strResult[0];
29 txtAreaName.Text = strResult[1];
30 }
31 }
32 }
分析:
主要分析第22行代码 string[] strResult = strEmail.Split('@');
可见Split方法将一个string类型变量按一个指定的字符分割成了一个string类型的数组。
图片显示:取字符串子串方法SubString使用:
界面:
代码:
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 SubString练习
11 {
12 public partial class Form1 : Form
13 {
14 public Form1()
15 {
16 InitializeComponent();
17 }
18
19 private void btnShow_Click(object sender, EventArgs e)
20 {
21 string strIdentityId = txtIdentityId.Text;
22 string strBirthday = strIdentityId.Substring(6, 4);
23 int intBirthday = Convert.ToInt32(strBirthday);
24 int intNow = Convert.ToInt32(DateTime.Now.Year);
25 if (intNow - intBirthday > 18)
26 {
27 picBox.Visible = true;
28 }
29 else
30 {
31 MessageBox.Show("你未满18岁,不能观看!");
32 }
33 }
34 }
35 }
分析:
第22行代码:
string strBirthday = strIdentityId.Substring(6, 4);
Substring方法的参数:第一个参数表示从下标为6的位置开始;第二个参数表示长度为4。
字符串滚动效果,字符串子串方法Substring的使用:
界面:
代码:
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 Form1 : Form
13 {
14 public Form1()
15 {
16 InitializeComponent();
17 }
18
19 private void btnLeft_Click(object sender, EventArgs e)
20 {
21 string strMessage = txtMessage.Text;
22 string strFirst = strMessage.Substring(0, 1);
23 string strOthers = strMessage.Substring(1);
24 strMessage = strOthers + strFirst;
25 txtMessage.Text = strMessage;
26 }
27
28 private void btnRight_Click(object sender, EventArgs e)
29 {
30 string strMessage = txtMessage.Text;
31 string strLast = strMessage.Substring(strMessage.Length - 1, 1);
32 string strOthers = strMessage.Substring(0, strMessage.Length - 1);
33 strMessage = strLast + strOthers;
34 txtMessage.Text = strMessage;
35 }
36 }
37 }
分析:
代码中第22行
string strFirst = strMessage.Substring(0, 1);
表示从第0个下标位置开始,长度为1
string strOthers = strMessage.Substring(1);
表示从第1个下标位置开始,长度就是从1开始及其之后的所有。
用户登录:(用户名"admin",密码"888888")
功能:
用户输入"admin"用户名、"888888"密码,登录
代码:
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 Form1 : Form
13 {
14 int ErrorTimes=0;
15 public Form1()
16 {
17 InitializeComponent();
18 }
19
20 private void btnLogin_Click(object sender, EventArgs e)
21 {
22 string strUserName = txtUserName.Text;
23 string strPassWord = txtPassWord.Text;
24 if (ErrorTimes >=3)
25 {
26 MessageBox.Show("错误次数大于3次,程序即将退出");
27 Application.Exit();//等同于this.close()
28 }
29 if (strUserName.Equals("admin", StringComparison.OrdinalIgnoreCase) && strPassWord == "888888")//对于用户名部分的比较表示不区分大小写
30 {
31 MessageBox.Show("登录成功");
32 ErrorTimes = 0;
33 }
34 else
35 {
36 MessageBox.Show("用户名或者密码错误");
37 ErrorTimes++;
38 }
39 }
40 }
41 }
分析:
代码第27行,Application.Exit()和this.close()这两个方法在本段代码中看起来效果完全一样,实则不同:
Application.Exit()真正退出整个程序。
this.close()则只是关闭了当前这一个窗口(上面的代码由于只有一个窗口,所以看起来就和退出了整个程序一样)。
代码第29行,strUserName.Equals("admin", StringComparison.OrdinalIgnoreCase)
Equals方法的第一个参数是要进行比较的字符串,第二个参数是表示比较不区分大小写
TextBox控件之多行文本框练习:
界面:
双击统计按钮,在其click事件中写入一句代码:
string strScores = txtScores.Text;
然后设置断点,调试,如下图:
可以知道多行的TextBox控件中到底存储的是些什么东东了。
"小王=149\r\n小李=138\r\n小赵=120"就是这样一个字符串。
但是这里我们不使用文本框的Text属性来获取文本框中的值,而是使用文本框的Lines属性来获取。代码如下:
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 TextBox控件之多行文本框练习
11 {
12 public partial class Form1 : Form
13 {
14 public Form1()
15 {
16 InitializeComponent();
17 }
18
19 private void btnCount_Click(object sender, EventArgs e)
20 {
21 int maxScore = 0;
22 string maxName="";//这里必须给maxName赋一个初值,不然会编译错误:使用了未赋值的变量maxName
23 string[] strScores = txtScores.Lines;//Lines属性表示获取该文本框的每一行,这个属性返回一个字符串数组来存储从文本框中取出来的每一行
24 foreach (string line in strScores)
25 {
26 string[] strEveryLine = line.Split('=');
27 int intScore = Convert.ToInt32(strEveryLine[1]);
28 if (maxScore < intScore)
29 {
30 maxScore = intScore;
31 maxName = strEveryLine[0];
32 }
33 }
34 string strResult = string.Format("第一名是{0},成绩为:{1}", maxName, maxScore);
35 MessageBox.Show(strResult);
36 }
37 }
38 }
ComboBox控件详解:
属性:
-将DropDownStyle的属性值设置为DropDownList,则可以将控件设为只读。
-该控件的Items属性,就是保存控件中的文本的。Items属性有两个常用方法:
Items.add("......");
Items.clear();
-SelectedIndex属性,表示该控件中被选中的Items的序号。
-SelectedItem属性,表示该控件中被选中的Items的对象。
事件:
SelectedIndexChanged,该事件表示该控件中被选中的文本发生改变,即选中了其它文本。
实例-四则计算器:
-界面:
-代码:
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 Form1 : Form
13 {
14 public Form1()
15 {
16 InitializeComponent();
17 }
18
19 private void btnEquals_Click(object sender, EventArgs e)
20 {
21 int intNumber1 = Convert.ToInt32(txtNumber1.Text.Trim());
22 int intNumber2 = Convert.ToInt32(txtNumber2.Text.Trim());
23 int intResult = 0;
24 switch (cmbCalculation.SelectedIndex)//ComboBox这个类中的SelectedIndex属性,表示的是该控件中被选中的Items的序号
25 {
26 case 0:
27 intResult = intNumber1 + intNumber2;
28 break;
29 case 1:
30 intResult = intNumber1 - intNumber2;
31 break;
32 case 2:
33 intResult = intNumber1 * intNumber2;
34 break;
35 case 3:
36 if (intNumber2 == 0)
37 {
38 MessageBox.Show("除数不能为零,请重新输入");
39 return;
40 }
41 intResult = intNumber1 / intNumber2;
42 break;
43 default:
44 throw new Exception("程序出现错误,即将退出");//直接new了一个对象,没有将这个对象的地址赋值给任何实例,原因是这里我们并不需要这个对象返回的值,我们需要的仅仅是它所产生的副作用。
45 }
46 txtResult.Text = intResult.ToString();
47 }
48 }
49 }
-分析:
主要分析代码中的24行和44行。
实例-省市选择:
-界面:
-代码:
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 Form1 : Form
13 {
14 public Form1()
15 {
16 InitializeComponent();
17 }
18
19 private void cmbProvince_SelectedIndexChanged(object sender, EventArgs e)
20 {
21 string strSelected = cmbProvince.SelectedItem.ToString();
22 switch (strSelected)
23 {
24 case "北京":
25 cmbCity.Items.Clear();
26 cmbCity.Items.Add("朝阳");
27 cmbCity.Items.Add("海淀");
28 break;
29 case "上海":
30 cmbCity.Items.Clear();
31 cmbCity.Items.Add("徐汇");
32 cmbCity.Items.Add("张江");
33 break;
34 case "深圳":
35 cmbCity.Items.Clear();
36 cmbCity.Items.Add("罗湖");
37 cmbCity.Items.Add("福田");
38 break;
39 }
40 }
41 }
42 }