Properties VB6:某些控件数组元素属性不可用

Properties VB6:某些控件数组元素属性不可用,properties,vb6,control-array,Properties,Vb6,Control Array,在重构一些旧的VB6代码时,我偶然发现了一些非常奇怪的行为。当我试图设置控件数组元素的DragMode属性时,当我将此控件与其数组分离时,编译器会告诉我“找不到方法或数据成员” 请参阅下面的示例,其中“myControl”只是一个包含文本框的用户控件。其中“Controls”是一个包含myControls的控件数组。第一个循环有效,第二个循环无效 Dim i As Integer Dim ctrl As myControl For i = 0 To 2 myControls(i).Dr

在重构一些旧的VB6代码时,我偶然发现了一些非常奇怪的行为。当我试图设置控件数组元素的DragMode属性时,当我将此控件与其数组分离时,编译器会告诉我“找不到方法或数据成员”

请参阅下面的示例,其中“myControl”只是一个包含文本框的用户控件。其中“Controls”是一个包含myControls的控件数组。第一个循环有效,第二个循环无效

Dim i As Integer
Dim ctrl As myControl

For i = 0 To 2
    myControls(i).DragMode = vbAutomatic
Next i

For Each ctrl In myControls
    ctrl.DragMode = vbAutomatic
Next
更新:

感谢@wqw,我让for-each循环正常工作。现在,适用于我的代码如下所示:

Dim ctrlExt As VBControlExtender
Dim ctrl As myControl

For Each ctrlExt In myControls

    Set ctrl = ctrlExt

    ctrlExt.DragMode = vbAutomatic
    ctrl.SpecificProperty = "Test"
Next

尝试以VBControlExtender的身份按住ctrl键

这很有效

Dim i As Integer
Dim ctrl As VBControlExtender

For Each ctrl In Controls
    ctrl.DragMode = vbAutomatic
Next

For i = MyControls.LBound To MyControls.UBound
    MyControls(i).DragMode = vbAutomatic
Next i

谢谢你的快速回复。我一定是少了点什么。在我看来,好像你刚刚切换了两个循环。示例的第二个循环始终有效(除了这个循环,因为您更改了controlarray的名称),而示例的第一个循环仍然无效,因为我现在发现类型不匹配。控件的类型为“myControl”。我已尝试将控件数组的名称更改为myControl,因为我发现控件是窗体上控件集合的名称….:-/这就是我错过的。只有我得到了同样的结果。没有。。你是对的!它确实有效。我回答得太快了!我很抱歉!请注意,如果用户控件位于单独的ActiveX控件(OCX)项目中和/或在编译应用程序时,则设置ctrl=ctrlExt可能会失败。在这种情况下,必须使用
Set ctrl=ctrlExt.Object