2014-09-24 4 views
0

У меня есть пользовательская форма, которая имеет текстовое поле и любое значение, помещенное в текстовое поле, будет определять количество динамических элементов управления, которые добавляются в пользовательскую форму, а затем есть кнопка и один раз, щелкните Я хочу, чтобы динамические элементы управления были полностью удалены из пользовательской формы.удаление элементов управления, добавленных во время выполнения

Ниже показан код, который используется для создания динамических элементов управления и этот код работает отлично

For i = 1 To TextBox1.Value 
     newPosition = 360 

     Set cLabel = Me.Controls.Add("Forms.Label.1") 
      With cLabel 
       .Caption = "Label " & (i) 
       .Font.Size = 8 
       .Font.Bold = True 
       .Font.Name = "Tahoma" 
       '.Left = 70 
       .Left = 36 
       .Top = switchBoardLevel 
       .Width = 130 
      End With 


     switchBoardLevel = switchBoardLevel + newPosition   


     Set cButton = Me.Controls.Add("Forms.CommandButton.1") 
     With cButton 
      .Name = "CommandButton" & i 
      .Caption = "Calculate" 
      .Left = 300 
      .Top = buttonStartPosition 
      .Width = 45 
      .Height = 18 
     End With 

     ReDim Preserve TextListBox(1 To i) 
     Set TextListBox(i).ButtonGroup = cButton 

     buttonStartPosition = buttonStartPosition + newPosition 
    Next i 

Однако существует проблема, когда дело доходит до удаления динамически созданных элементов управления. Я попробовал множество способов удалить элементы управления. Код ниже выполняется, когда кнопка нажата, чтобы удалить элементы управления, но это просто не сработает для меня, и я обхожусь кругами, поэтому было бы очень полезно, если бы кто-нибудь мог дать мне некоторое руководство по этой проблеме.

For Each TextListBox(i).ButtonGroup In Me.Controls 
    If (TypeOf TextListBox(i).ButtonGroup Is CommandButton) Then 
     TextListBox(i).ButtonGroup.Visible = False 
    End If 
Next 

ответ

1

Вы не дали много информации, но вы не можете петли таким образом - вам необходимо перебрать массив:

For i = Lbound(TextListBox) to UBound(TextListBox) 
    If TypeOf TextListBox(i).ButtonGroup Is MSForms.CommandButton Then 
     TextListBox(i).ButtonGroup.Visible = False 
    End If 
Next 
+0

К сожалению я только получить шанс, чтобы вернуться для вас на этом посту, но это исправление не сработало, потому что по какой-то причине «UBound» появляется как -1! – user3538102

+0

Кажется, ваш массив был потерян. Где это объявлено? – Rory

Смежные вопросы