WinForm学习笔记 

加法计算器:

界面:  

 

代码:

 

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 }

 

posted on 2013-04-29 00:58  零点HY  阅读(195)  评论(0编辑  收藏  举报