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

时间:2008-11-28 11:50:49

标签: vb6

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

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

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

忘记所有的GetSetting过程等,只要它返回一行文字并且工作正常。

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

感谢收到这个令人困惑的问题的任何答案。


感谢您的帮助。

该机器正在运行Vista Business 64位。

用户可以通过启用的用户帐户控制获得管理员权限。

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

4 个答案:

答案 0 :(得分:7)

您可能在错误的地方找错了。当您更改Text的{​​{1}}属性时,如果新文本与上一个文本不同,则会触发ComboBox的{​​{1}}事件。 ComboBox和/或Change事件也可能会触发,具体取决于您的代码正在执行的操作以及表单的设置方式。

如果LostFocus事件处理程序(或ValidateChange事件处理程序中发生错误,如果您正在对它们执行任何操作),则错误处理代码更改组合框文本的代码将从不被调用(这与错误处理和事件在VB6中的工作方式有关)。

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

这是一个快速示例,演示错误处理可能并不总是像您在VB6中认为的那样。

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

LostFocus

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

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

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

cmbAIDFile_Change

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

答案 1 :(得分:1)

vista机器有什么区别?

  • 版本
  • 设置
  • 用户权限

Al会对应用程序的工作方式产生影响。

答案 2 :(得分:1)

Mike Spears建议你在所有事件中放置错误处理程序所需的资金是正确的,因为将字符串分配给组合框的文本会导致许多事件被触发。

我的贡献是尝试以下方法。

Dim TempS as String
TempS = clsTonyToolkit.GetSetting("ExportAIDFile",gtypmetadata.gcnnCentral) & ""
cmbAIDFile.Text = TempS

Unicode可能会有一些时髦的事情。这由正常分配的错误0“无效的过程调用或参数”指示。再次,如果您有cmbAIDfile的事件过程,那么您需要捕获它们,以便您可以看到是否发生错误。

答案 3 :(得分:0)

使用这些代码

Private Sub Command1_Click()
    On Error Resume Next
        'Your combo-box code here
    On Error GoTo 0
End Sub