当前位置:文档之家› 第7章 VB NET异常处理

第7章 VB NET异常处理

【例7-l】使用On Error语句产生Err对象,通过测试Err对象,显示一个“过程调用或参数无效”错误对话框,结果如图8-4所示。

操作步骤:
(1)界面设计:
创建一个Windows应用程序,在窗体上创建一个按钮控件,修改其Text属性为“生成错误”。

(2)双击按钮控件进入代码设计窗口,对其Click事件编写代码如下:
图8-4 错误测试对话框
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Dim Msg As String
On Error Resume Next
Err.Clear()
Err.Raise(5)
If Err.Number <> 0 Then
Msg = "错误#" & Str(Err.Number) & "发生原因是:" & Err.Source & vbCrLf &
Err.DescriptionMsgBox(Msg, rmation, "Error")
End If
End Sub
提示:
这里的vbCrLf为系统内置常量,表示回车换行。

(3)保存项目,运行应用程序,单击窗体中的“生成错误”按钮,得到如图8-4所示的消息框。

【例7-2】使用非结构化异常处理方法处理被0除错误。

运行结果如图8-5所示的两个消息框。

图8-5 错误测试及处理结果对话框
操作步骤:
1.界面设计:
创建一个Windows应用程序,在窗体上创建一个按钮控件,修改其Text属性为“生成错误”。

2.双击按钮控件进入代码设计窗口,对其Click事件编写代码如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles
Button1.Click
Dim x As Integer, y As Integer, z As Integer
On Error GoTo DivideByZero '启用错误捕捉
x = 5
y = 0
z = x / y
On Error GoTo 0
MsgBox(x & "/" & y & "=" & z, rmation, "结果")
Exit Sub
DivideByZero:
MsgBox("0不可以作除数!", MsgBoxStyle.Exclamation, "错误")
y = 2
Resume '返回发生错误的语句z = x / y End Sub
3.保存项目,运行应用程序,单击窗体中的“生成错误”按钮,得到如图8-5所示的两个对话框。

提示:
这里的DivideByZero是行标签,行标签定义时由冒号结束。

【例7-3】使用Try…Catch…Finally结构,处理被0除错误。

运行结果为如图8-6所示的两个消息框。

(a)(b)
图8-6处理被0除错误,之后退出
操作步骤:
1.界面设计:
创建一个Windows应用程序,在窗体上创建一个按钮控件,修改其Text属性为“生成错误”。

2.双击按钮进入代码设计窗口,对其Click事件编写代码如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim x As Integer = 5
Dim y As Integer = 0
Try
x /= y
Catch ex As Exception When y = 0
MsgBox(ex.Message, rmation, "被0除错误")
Finally
MsgBox("退出Try结构", rmation, "退出")
End Try
End Sub
3.保存项目,运行应用程序,单击窗体中的“生成错误”按钮,得到如图8-6(a)所示的消息框。

4.单击“确定”按钮后,得到如图8-6(b)所示的消息框。

【例7-4】第10章案例分解:
欢迎窗体是整个应用程序的入口,应在其中处理数据库连接问题。

案例中应用结构化异常处理方法处理数据库连接出现错误的问题。

相关部分代码如下:
Public Class Welcome
Private Sub Welcome_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
Call connect()
Try
cn.Open()
Catch ex As Data.OleDb.OleDbException
MessageBox.Show(ex.Message & "连接错误,程序将退出!", "数据库连接错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
Application.Exit()
End Try
Dim frmLogin As New FrmLogin
frmLogin.ShowDialog()
End Sub
End Class
【例7-5】测试自己引发的一个异常。

完成功能:使用Throw语句,抛出一个异常,由调用的程序进行处理。

操作步骤:
(1)创建一个Windows应用程序,其自动创建的默认窗体为Form1。

(2)在窗体Form1上创建一个命令按钮控件,然后修改其Text属性为“产生错误”。

(3)在Forml中增加一个私有过程,代码如下:
Private Sub test()
Throw New Exception("我释放了一个异常")
End Sub
(4)对按钮的Click事件编写代码如下:
Try
test()
Catch ex AS Exception
MsgBox(ex.Message,MsgBoxStyle.Information,"测试异常")
End Try
(5)保存项目,运行应用程序,单击窗体中的“产生错误”按钮,得到如图8-7所示的对话框。

图8-7 例8-5的运行结果
【例7-6】测试用户输入的年龄,处理年龄的范围错误。

如果用户输入的不是1到100之间的数值,将抛出异常。

操作步骤:
(1)创建一个Windows应用程序,其自动创建的默认窗体为Form1。

(2)在窗体上建立一个Label,其Text属性为“年龄”,一个TextBox,一个Button,其Text 属性为“测试”。

(3)对按钮的Click事件编写代码如下:
Dim v AS Double
Try
v=Val(TextBoxl.Text)
If v<=0 Or v>100 Then
Throw New Exception("输入的年龄超出范围")
End If
Catch ex As Exception
MsgBox(TextBoxl.Text & vbCrLf &ex.Message,MsgBoxStyle.Question)
TextBoxl.Text=""
TextBoxl.Focus()
End Try
(4)保存项目,运行应用程序。

当在文本框中输入年龄后,单击窗体中的“测试”按钮,当输入的年龄小于等于0或者大于100时,会显示如图8-8所示的对话框。

图8-8 例8-6的运行结果。

相关主题