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

コンボボックスをフレームなどのコンテナコントロールに配置してから、スクロールバーを追加することはできませんでした(水平および垂直の方向プロパティを設定します)。

したがって、ループの外側に、フレームを追加します。

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

今、あなたのループの中に

コンボボックスをフォームに追加する代わりに、*フレームコンテナ*に追加するようにコードを変更します。

Ozgrid MVPサイト には、これに関する多くのヘルプがあります。実行時のコントロールの作成、オンザフライ

乗り方を教えてください

HTH

フィリップ

于 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 subを呼び出したので、いつでも呼び出してください。
  • 左のプロパティを設定していません 。ctrl.height行の下で簡単に設定できます。
  • 必要に応じて他のプロパティを変更します
于 2013-03-25T21:05:31.987 に答える