Вот пример, который вы можете адаптировать.
Private Sub btnAddClass_Click()
Dim ctrl As Control, newCtrl As Control, offsetTop As Integer
offsetTop = 30
For Each ctrl In Me.Controls
If TypeName(ctrl) <> "CommandButton" Then
If ctrl.Top = btnAddClass.Top - offsetTop Then
If TypeName(ctrl) = "ComboBox" Then
Set newCtrl = Me.Controls.Add("Forms.ComboBox.1")
ElseIf TypeName(ctrl) = "TextBox" Then
Set newCtrl = Me.Controls.Add("Forms.TextBox.1")
ElseIf TypeName(ctrl) = "CheckBox" Then
Set newCtrl = Me.Controls.Add("Forms.Checkbox.1")
End If
With newCtrl
.Height = ctrl.Height
.Width = ctrl.Width
.Top = ctrl.Top + offsetTop
.Left = ctrl.Left
End With
End If
End If
Next ctrl
btnAddClass.Top = btnAddClass.Top + offsetTop
btnRemoveClass.Top = btnRemoveClass.Top + offsetTop
Me.Height = Me.Height + offsetTop
End Sub
Private Sub btnRemoveClass_Click()
Dim ctrl As Control, offsetTop As Integer
offsetTop = 30
For Each ctrl In Me.Controls
If TypeName(ctrl) <> "CommandButton" Then
If ctrl.Top = btnAddClass.Top - offsetTop Then
Me.Controls.Remove (ctrl.Name)
End If
End If
Next ctrl
btnAddClass.Top = btnAddClass.Top - offsetTop
btnRemoveClass.Top = btnRemoveClass.Top - offsetTop
End Sub
Примечания:
Чтобы заставить это работать, мне нужно объяснить настройку:
- Ваш начальный ряд элементов управления имеет свойство
Top
, установленное на 12
- Есть две кнопки с именами
btnAddClass
и btnRemoveClass
с Top
, установленными на 42
Высота offset
между элементами управления и кнопками составляет 30
.
Чтобы добавить новые элементы управления, просто l oop над каждым элементом управления, создайте новый и установите его Top
равным существующему значению Top
элемента управления + смещение (т.е. 30). В то же время вы сдвигаете кнопки вниз на 30 и увеличиваете высоту пользовательской формы на 30.
Чтобы удалить элементы управления, вы получаете последнюю строку, проверяя свойство Top
относительно btnAddClass
. Затем вы удаляете эти элементы управления и смещаете кнопки вверх на 30 и уменьшаете высоту пользовательской формы на 30.