当前位置:  开发笔记 > 编程语言 > 正文

在vb6中填充组合框时运行时错误0

如何解决《在vb6中填充组合框时运行时错误0》经验,为你挑选了1个好方法。

特定机器特有的奇怪错误......

我有一个应用程序,其中组合框的文本值设置为文档的路径(即...

cmbAIDFile.Text = clsTonyToolkit.GetSetting("ExportAIDFile",gtypmetadata.gcnnCentral) & ""

忘记所有的GetSetting过程等,只是它返回一行文本并且工作正常.

这适用于除一个以外的所有机器.这个特定的Vista机器抛出错误运行时错误0并将用户抛出程序,无论程序上的ErrorHandling如何.其他Vista机器工作正常.

我们将非常感激地回答这一令人困惑的问题.


谢谢你的帮助.

该机器运行Vista Business 64位.

用户可以通过打开的用户帐户控制获得管理员权限.

根据您的提示,我尝试以管理员身份运行应用程序并获得各种奇怪的响应(丢失文件,未注册的依赖项等).已卸载该应用程序并将尝试重新安装.我认为该文件夹的卷影副本也可能令人困惑.



1> Mike Spross..:

您可能在错误的位置查找错误.当您更改Text的属性ComboBox时,ComboBoxChange事件将触发,如果新文本是从以前的文本有所不同.这些LostFocus和/或Validate事件也可能会触发,具体取决于您的代码正在执行的操作以及表单的设置方式.

如果发生错误Change事件处理(或LostFocusValidate事件处理程序,如果你正在做与他们任何东西),以更改组合框的文本代码中的错误处理代码将永远不会被调用(这有多么的错误做处理和事件在VB6中工作).

作为一般规则,您应该始终在VB6代码中的每个例程(Sub,Function或Property)中放置一个错误处理程序,因为您永远无法确定是否会捕获每个错误.

这是一个快速示例,它表明错误处理可能并不总是像您在VB6中认为的那样工作.

创建一个新的标准EXE项目并将CommandButton(Command1)和ComboBox(Combo1)添加到默认窗体,并将以下代码添加到窗体:

Private Sub Combo1_Change()

   Dim a As Long
   a = 1/0 '<-- this will cause a divide-by-zero runtime error'

End Sub

Private Sub Command1_Click()

    On Error GoTo MyErrorHandler

    'Change the combobox text.'
    'This will cause the Change event to fire' 

    Combo1.Text = "test"

    Exit Sub

MyErrorHandler:
    'This code will not be executed if an error occurs in Combo1_Change...'
    MsgBox "My error-handler called."

End Sub

如果编译项目并运行生成的EXE,则只要单击Command1就会出现运行时错误,程序将终止.这是因为MyErrorHandler未调用添加的错误处理代码(在示例中).但是,如果您将错误处理代码添加到Combo1_Change事件处理程序,您可以捕获错误并尝试处理它(至少,您可以防止程序崩溃).

因此,我会确保每个事件过程中都有错误处理代码,如果缺少则添加它.这应该可以更容易地确定错误实际发生的位置.例如,如果您在cmbAIDFile_Change事件过程中有代码,请确保它具有错误处理.我也会在代码中添加行号(如果你还没有它们):这样你就可以Erl在错误处理代码中使用它来获取发生错误的实际行号.有关如何在错误消息中记录行号的示例,请参阅以下代码.

使用Erl报告错误消息中的行号

Private Sub cmbAIDFile_Change()

1000   On Error Goto ErrorHandler

1010   DoSomething
1020   DoSomethingElse

ErrorHandler:

1030   Dim sErrMsg As String
       sErrMsg = "A fatal error occurred." & vbCrLf & vbCrLf  & _
                 "Method: cmbAIDFile_Change" & vbCrLf & _
                 "Line: " & Erl & vbCrLf & _ 
                 "Err.Number: " & Err.Number & vbCrLf & _
                 "Err.Description: " & Err.Description

1040   MsgBox sErrMsg, vbCritical+vbOKOnly, "Fatal error"

End Sub 

一旦你有更细粒度的错误处理,你就可以开始研究为什么你只在一台机器上看到问题,因为你应该有更多关于正在发生的错误的可靠信息,并且要好得多找出根本原因的位置.

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有