如何交换VB6集合中的项目?

时间:2009-12-18 18:20:30

标签: vb6 collections

如果我有一个表单集合(myForms),并且我想在集合中切换两个表单的位置(比如第3和第4项),我希望以下代码可以工作:

Dim temp as Form
Set temp = myForms(3)
Set myForms(3) = myForms(4)
Set myForms(4) = temp

但这不起作用。它在第三行失败,错误“控件属性是只读的”。如果我将行更改为:

myForms(3) = myForms(4)

我得到了类型不匹配错误。

2 个答案:

答案 0 :(得分:3)

如果myForms是标准集合:Dim myForms as New Collection(实际上与控件集合不同)并且您已使用:myForms.Add frmOne, myForms.Add frmTwo等添加了表单,那么(是)您需要使用添加和删​​除方法,因为集合引用添加的对象的方式。
否则解释是您实际上想要将一个表单替换为另一个表单,这是不允许的。您不能说:Set frmOne = frmTwo,除非这些实际上是Form类型的变量。
为什么需要切换订单?您是否在某处引用了项目编号?使用Dictionary来收集表单并通过键引用它们会很有用吗?很抱歉,在处理表单和表单实例时要考虑很多。 :-)
PS。类型不匹配只是因为两个项都是对象,需要“设置”。

答案 1 :(得分:2)

实际上,您无法在VB6中的控件集合中交换项目。您需要使用与每个相关联的AddRemove函数。看看这篇文章:

http://support.microsoft.com/kb/190670

希望这有帮助!