1

我正在开发一个 VB6 应用程序,我想发送一个类型作为参考并将其存储在另一种形式中。这可能吗?

发送没问题,我就用ByRef关键字:

public Sub SetStopToEdit(ByRef currentStop As StopType)

但是当我尝试使用 Set 存储currentStop在接收模块中时,运行程序时出现“需要对象”错误:

Private stopToEdit As StopTypeModule.StopType
' ... Lots of code
Set stopToEdit = currentStop

StopType在模块(不是类模块)中定义如下:

Public Type StopType
    MachineName As String
    StartDate As Date
    StartTime As String
    Duration As Double
End Type

是否可以存储发送的引用或者我必须StopType变成一个类?

仅设置局部变量即可:

stopToEdit = currentStop

stopToEdit稍后更改时,更改在发送到的变量中不可见SetStopToEdit

4

3 回答 3

2

您需要将其重构为一个类。

于 2008-09-24T12:22:00.940 回答
1

什么是停止类型?它是如何定义的?类型是 VB6-Record 的东西吗?如果是这样(并且如果可能的话),您应该将它重新定义为一个类 - 并且只使用它们,否则您将遇到 Collections 问题。

尝试删除Set关键字 - 字符串、整数和数字,但如果我没记错的话,记录也不是Set,它们是Let,但这在分配中是隐含的:

stopToEdit = currentStop

编辑:如果您想更改传入的(ByRef)记录,请为元素副本执行手动元素,而不是重新分配整个内容 - 这应该可以解决问题。

同时:不要!ByRef(遗憾的是在 VB 中是默认设置)不是很酷(套用我儿子的话)。尝试设计你的函数,这样它们就不会改变传入的参数 - 这就是你有一个返回值......

于 2008-09-24T12:12:29.247 回答
0

这里的混淆是 StopType 不是像对象那样的引用,而是更像是内置类型,例如 LONG。当你这样做时:

stopToEdit = currentStop

您只是获取 currentStop 的副本。如果您随后更改 stopToEdit,则需要将其复制回来:

currentStop = stopToEdit

这样,该值将从 Sub 传回。

于 2008-09-29T12:03:32.227 回答