2014-08-28 3 views
0

В моей пользовательской форме я спрашиваю у пользователя, сколько из них требуется, и на основе числа, которое пользователь вводит в элементы управления, динамически создается во время выполнения. Я хочу иметь возможность установить размер моей пользовательской формы на основе нижней позиции последнего динамического элемента управления, который был добавлен в пользовательскую форму. Ниже приведен код, который я написал для этого, все, что я хочу сделать в данный момент, предупреждает нижнюю позицию каждого динамического элемента управления, поскольку они добавляются в пользовательскую форму.Найдите нижнюю позицию динамического управления

Dim dynamicControl As Control 

For i = 1 To TextBox1.Value 
    Set cList = Me.Controls.Add("Forms.ListBox.1") 
    With cList 
     .Name = "listbox" & (i) 
     .Left = 150 
     .Top = listStartPosition 
     .Width = 300 
     .Height = 140 
    End With 
Next i 

dynamicControl = "listbox" & (i) 
Msgbox dynamicControl.Bottom 

Когда я бегу мои ошибки кода это, когда я пытаюсь установить dynamicControl = "listbox" & 0 и ошибку я ПОЛУЧАТЬ является object variable or with block variable not set переменная объекта или переменная блока не установлен

+0

Вам необходимо сохранить элементы управления, которые вы создали в коллекции, и t курица просто вернет нижнюю часть последнего добавленного предмета – SWa

+1

Я понял это, я могу просто сделать «Clist.Top» и потому, что знаю размер списков, я могу вернуть дно! Я должен был это осознать раньше, но спасибо за вашу помощь – user3538102

+0

вы должны использовать ключевое слово 'Set' при назначении переменной объекта, например' Set dynamicControl = Me.Controls («listbox» & i) ' –

ответ

-2

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

Private Sub createcontrol(num As Integer) 
    Dim StartPos As Integer 
    Dim WidthPos As Integer 
    StartPos = TextBox1.Top + TextBox1.Height + 10 
    For i = 1 To num 
     Set cList = Me.Controls.Add("Forms.ListBox.1") 
     With cList 
      .Name = "listbox" & (i) 
      .Left = 150 
      .Top = StartPos 
      .Width = 300 
      .Height = 140 
      StartPos = StartPos + .Height + 10 
      Me.Width = .Width + .Left 
     End With 
    Next i 
    Me.Height = StartPos - 8 

End Sub 
+0

Почему вы не любили мой ответ , – user3980820

+0

Это был не я, который не любил ваш вопрос! У меня уже было исправление для этого ответа, который я подробно изложил в комментарии по моему вопросу. Тем не менее, я попробую ваше решение, и если это сработает, я буду голосовать за ваш ответ :) спасибо за ответ, кстати! – user3538102

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