0

我遇到了一个小问题,这让我很头疼试图解决。我已经为此寻找了很长时间,但我仍然没有找到如何做到这一点。

我有一个小脚本,它将在表单上创建组合框。

For j = 0 To UBound(ComponentList) - 1
'Set Label
Set control = ComponentSelectionForm.Controls.Add("Forms.Label.1", "ComponentLabel" & CStr(j), True)
With control
    .Caption = "Component " & CStr(j)
    .Left = 30
    .Top = Height
    .Height = 20
    .Width = 100
    .Visible = True
End With

'set ComboBox
Set combo = ComponentSelectionForm.Controls.Add("Forms.ComboBox.1", "Component" & CStr(j), True)
With combo
    .List = ComponentList()
    .Text = "NONE"
    .Left = 150
    .Top = Height
    .Height = 20
    .Width = 50
    .Visible = True
    Set cButton = New clsButton
    Set cButton.combobox = combo
    coll.Add cButton
End With
Height = Height + 30
Next j

我发现有时我可以拥有多达 50 个组合框。这显然会离开页面。我要做的是创建一个容器来将这些组合框保存在具有垂直滚动条的表单中,以便用户可以滚动浏览它们。

我应该能够创建一个滚动条,但我该怎么做才能使滚动条滚动组合框但将标签留在其上方,并将其下方的按钮留在它们所在的位置。

我正在寻找一些关于去哪里帮助实现这一目标的帮助/指针。

提前致谢。

4

2 回答 2

2

您不能将组合框放在诸如 Frame 之类的容器控件中,然后添加滚动条(设置 Horizo​​ntal 和 Vertical 的方向属性)。

所以,在你的循环之外,添加你的框架:

ComponentSelectionForm.Controls.Add("Forms.Frame.1", "fraContainer" , True)

然后将滚动条添加到容器中

ComponentSelectionForm.Controls("fraContainer").controls.add("Forms.Scrollbar.1", "scHorizontal" , True)

with ComponentSelectionForm.Controls("fraContainer").controls("scHorizontal")
    ' set orentation to Horizontal
    .orientation=1
end with

ComponentSelectionForm.Controls("fraContainer").controls.add("Forms.Scrollbar.1", "scVertical" , True)

with ComponentSelectionForm.Controls("fraContainer").controls("scVertical")
    ' set orentation to Vertical
    .orientation=0
end with

现在,在你的循环中

更改您的代码,而不是将组合框添加到表单中,而是将它们添加*到 FRAME 容器*

在Ozgrid MVP 站点 上对此有很多帮助:在运行时创建控件,在运行中

让我们知道您的身体情况如何

高温高压

菲利普

于 2013-03-25T17:16:29.483 回答
1

你好,这是一个子程序。希望这对您的概念有所帮助:)

Private Sub UserForm_Click()
    Call AddCombo(30)
End Sub

Private Sub AddCombo(num As Integer, Optional gap As Single = 2.25, _
                     Optional ctrlHeight As Single = 18)
    Dim ctrl As Control, i As Integer
    Static lastTop As Single
    lastTop = 2
    For i = 1 To num
        Set ctrl = UserForm1.Controls.Add("Forms.ComboBox.1", "Combo" & i, True)
        With ctrl
            If i = 1 Then
               ctrl.Top = lastTop
               ctrl.Height = ctrlHeight
               'Add other codes here .....
            Else
               lastTop = lastTop + ctrlHeight + gap
               ctrl.Top = lastTop
               ctrl.Height = ctrlHeight
               'Add other codes here .....
            End If
        End With
    Next i
    If lastTop > Me.Height Then
       Me.ScrollHeight = lastTop
       Me.ScrollBars = fmScrollBarsVertical
    End If
End Sub

需要修改的东西:

  • 我已经使用 UserForm_Click() 事件来调用 AddCombo 子,所以请在任何你想要的地方调用它。
  • 我没有设置 left 属性,你可以在 ctrl.height线下面轻松设置
  • 根据需要更改其他属性
于 2013-03-25T21:05:31.987 回答