为什么你会使用“On Error Goto 0”? [英] Why would you ever use "On Error Goto 0"?

查看:133
本文介绍了为什么你会使用“On Error Goto 0”?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



此语句转为错误处理程序关闭,这意味着任何错误都会使应用程序崩溃。为什么这样会是可取的?

解决方案

在VB6中,您可以指定要在稍后的特定代码中处理错误例程:

 子栏()
错误转到MyHandler
...
...一些代码抛出一个错误...
...
退出Sub
MyHandler:
...一些错误处理程序代码(可能弹出一个对话框)
End Sub

可能是这样,抛出错误的代码是本地化,并且您不希望该程序中所有其他代码的同一个处理程序。在这种情况下,您将使用On Error Goto 0,如下所示:

 子栏()
。 ..
错误Goto MyHandler
...一些代码引发错误...
错误Goto 0
...
...
退出Sub
MyHandler:
...一些错误处理程序代码(可能弹出一个对话框)
End Sub

现在,您已经有效地限定了错误处理,只有在特定的代码行失败时才执行。



通过调用 On Error Goto 0你不是说你想让应用程序立即崩溃。您只是想要在程序中更早地设置的任何错误处理程序进行注销;错误将被传递给调用堆栈到调用例程,如正常。


Why would you ever use "On Error Goto 0" in a VB6 app?

This statement turns the error handler off and would mean that any error would crash the app. Why would this ever be desirable?

解决方案

In VB6, you can specify that you want errors to be handled by particular code later in the routine:

Sub Bar()
    On Error Goto MyHandler
    ...
    ...some code that throws an error...
    ...
    Exit Sub
MyHandler:
    ...some error handler code (maybe pops up a dialog)
End Sub

It may be the case, however, that the code that throws the error is localized, and you don't want that same handler for all of the rest of the code in the routine. In that case, you'd use "On Error Goto 0" as follows:

Sub Bar()
    ...
    On Error Goto MyHandler
    ...some code that throws an error...
    On Error Goto 0
    ...
    ...
    Exit Sub
MyHandler:
    ...some error handler code (maybe pops up a dialog)
End Sub

Now you have effectively scoped the error handling to execute only if that particular line of code fails.

By calling "On Error Goto 0" you are NOT saying that you want the app to crash immediately. You are simply saying that you want to de-register any error handlers that you may have set up earlier in the routine; errors will be passed up the call stack to calling routines, like normal.

这篇关于为什么你会使用“On Error Goto 0”?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆