当前位置:文档之家› c#中程序异常处理

c#中程序异常处理

第五讲异常处理教学要求:1.理解异常处理的概念2.掌握异常处理的方法教学学时:2H例1. 编写一个应用程序,要求用户通过两个文本框输入两个数,并求它们的和,并在标签框中输出。

1. 界面设计新建一个项目,选择windows应用程序模板,在窗体上添加三个标签框,两个文本框和一个命令按钮,如图所示。

2. 设置属性先将两个文本框改名为txtA和txtB,将输出结果的标签框改名为labC,再设置各对象的属性如下:双击确定命令按钮,进入代码编辑窗口,在自动生成的程序模块private void button1_Click(object sender, EventArgs e){}中输入以下代码:int a, b,c;a = Int32.Parse(txtA.Text);b = Int32.Parse(txtB.Text);c = a + b;labC.Text = "计算结果为:"+txtA.Text + "+" + txtB.Text + "=" + c.ToString();4.运行程序测试程序结果是否正确。

例2. 异常处理。

在程序测试时,输入一个小数,或输入一些字符,程序出现异常并中止运行。

C#中提供了异常处理的机制方法为:通过try语句捕获异常,通过catch语句处理异常,通过finally语句完成程序的善后处理(如收回已分配的资源,关闭与数据源的连接等),通过throw语句抛出自定义的异常。

try{int a, b, c;a = Int32.Parse(txtA.Text);b = Int32.Parse(txtB.Text);c = a + b;labC.Text = "计算结果为:" + txtA.Text + "+" + txtB.Text + "=" + c.ToString(); }catch{MessageBox.Show("请输入正确格式的整数!");}例3. 处理多个异常在测试以上程序时,若输入一个很大的整数,程序的异常提示信息不够准确。

C#提供了处理多个异常的方法。

try{int a, b, c;a = Int32.Parse(txtA.Text);b = Int32.Parse(txtB.Text);c = a + b;labC.Text = "计算结果为:" + txtA.Text + "+" + txtB.Text + "=" + c.ToString(); }catch (FormatException x){MessageBox.Show("请输入正确格式的整数!");}catch (OverflowException x){MessageBox.Show("输入整数不能太大!");}例4. 进一步提高FormatException x中的变量x的作用,及MessageBox.Show()方法的重载。

try{int a, b, c;a = Int32.Parse(txtA.Text);b = Int32.Parse(txtB.Text);c = a + b;labC.Text = "计算结果为:" + txtA.Text + "+" + txtB.Text + "=" + c.ToString(); }catch (FormatException x)MessageBox.Show(x.Message);}catch (OverflowException x){MessageBox.Show("输入整数不大于"+Int32.MaxValue .ToString (),"异常信息",MessageBoxButtons.OK,MessageBoxIcon.Warning);}例5. 抛出自定义的异常及程序块的善后处理。

C#可通过throw语句抛出自定义的异常,通过finally语句完成程序的善后处理(如收回已分配的资源,关闭与数据源的连接等)。

public class MyException : Exception//定义一个自定义的异常类MyException 继承自Exception {public MyException(): base("请注意,输入的整数格式错误!")//定义MyException类的无参构造函数,调用基类的构造函数//并传递一个参数"请注意,输入的整数格式错误!"{ }}public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){try{int a, b, c;if (txtA.Text == "" || txtB.Text == "")throw new MyException();a = Int32.Parse(txtA.Text);b = Int32.Parse(txtB.Text);c = a + b;labC.Text = "计算结果为:" + txtA.Text + "+" + txtB.Text + "=" + c.ToString(); }catch (MyException x){MessageBox.Show(x.Message);}catch (FormatException x){MessageBox.Show("请注意,输入的整数格式错误!");catch (OverflowException x){MessageBox.Show("输入整数不大于" + Int32.MaxValue.ToString(), "异常信息", MessageBoxButtons.OK, MessageBoxIcon.Warning);}finally{MessageBox.Show("已完成程序块的善后处理!");}}}finally语句块是不论异常是否发生,都会执行的语句块。

作业题:P38(1)补充知识:对文本框中输入数据的校验。

public partial class Form1 : Form{int a, b, c;public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){c = a + b;Label1.Text = string.Format("{0}+{1}={2}", a, b, c);}private void textBox1_Validating(object sender, CancelEventArgs e){try{a = int.Parse(textBox1.Text);}catch(FormatException x){MessageBox.Show(x.Message);textBox1.Focus();textBox1.SelectAll();}}private void textBox2_Validating(object sender, CancelEventArgs e){try{b = int.Parse(textBox2.Text);}catch (FormatException x){MessageBox.Show(x.Message);textBox2.Focus();textBox2.SelectAll();}}private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {if (e.KeyChar == 13)textBox2.Focus();}private void textBox2_KeyPress(object sender, KeyPressEventArgs e) {if (e.KeyChar == 13){button1_Click(sender, e);}}private void textBox3_KeyPress(object sender, KeyPressEventArgs e) {if (e.KeyChar !=8&&e.KeyChar!=13&&!char.IsDigit(e.KeyChar)){MessageBox.Show("请输入数字");e.Handled = true;}}}}。

相关主题