Utwórz nowy formularz
poniższy kod wklej do kodu fromularza
każde kliknięcie w formularz doda TextBox'a
Ponieważ formularz będzie załadowany i widoczny zdarzenie Initialize nie wystąpi
taka sytuacja była w poprzedniej procedurze Test
Private Sub UserForm_AddControl(ByVal Control As MSForms.Control)
' po dodaniu textbox'a uruchamia się obsługa tego zdarzenie
End Sub
Private Sub UserForm_Click()
DodajTBx True
End Sub
Private Function DodajTBx(Optional Dodaj As Boolean = False) As Integer
'poniżej zdeklarowana zmienna przechowuje wartość do chwili gdy formularz nie zostanie zamknięty
' Unload lub przycisk X na pasku tytułu
'czas życia dodanych poleceniem Controls.Add obiektów jest taki sam
' dodanie Textboxa DodajTBx(True) lub nrDodanegoTBx= DodajTBx(True)
' odczyt licznika texboxów ileTBx=DodajTBx
Static IleTBx As Integer
'stała wMax -maksymalna ilość wierszy na TextBoxy
Const x0 = 1, y0 = 1, dx = 5, dy = 5, xw = 72#, yh = 18#, wMax = 3
Dim w, k, cx, cy, ScrlW, ScrlH
If Dodaj Then
IleTBx = IleTBx + 1 'ta wartość będzie pamiętana po wyjściu z funkcji
w = (IleTBx - 1) Mod wMax 'wiersz textboxow
k = Int((IleTBx + wMax - 1) / wMax) - 1 'kolumna textboxow
cx = x0 + k * (dx + xw) 'współrzedna pozioma
cy = y0 + w * (dy + yh) 'współrzedna pionowa
With Me
With .Controls.Add("forms.textbox.1", "textBox" & IleTBx)
.Top = cy
.Left = cx
.Height = yh
.Width = xw
.Text = .Name
ScrlW = .Left + .Width + 16 'położenie krancowe poziome prawego brzegu textboxa + szerokośc paska przewijania
ScrlH = .Top + .Height + 16 'położenie krancowe pionowe dolnego brzegu textboxa
End With
.ScrollBars = fmScrollBarsBoth
.KeepScrollBarsVisible = fmScrollBarsNone
'dostosowanie pasków przewijania
If ScrlH > .ScrollHeight Then .ScrollHeight = ScrlH
If ScrlW > .ScrollWidth Then .ScrollWidth = ScrlW
End With
End If
DodajTBx = IleTBx
End Function |