Jednym z podstawowych elementów każdej aplikacji jest kontrolka, którą zazwyczaj dodaje się do formularza w widoku projektu. Dynamiczne tworzenie komponentów to dodawanie ich w trakcie działania naszej aplikacji. Poniżej zamieszczam fragment kodu odpowiedzialnego za dynamiczne dodawanie komponentu panel. Zmienne globalne utworzone na początku programu to m.in. tablice obiektów. Dzięki takiemu podejściu w łatwy sposób można odnaleźć utworzony wcześniej element.
Co jeszcze warto wiedzieć? Każdej nowo utworzonej kontrolce można ustawić nie tylko jej właściwość, ale też zdarzenie. Przykładowo komponent Button może mieć zdarzenia: Click, Keydown, Mousedown i wiele innych. Zdarzenia takie dodajemy w następujący sposób:
AddHandler Przycisk.Click, AddressOf kliknij_mnie
Gdzie Przycisk to nazwa kontrolki a kliknij_mnie procedura obsługująca zdarzenie kliknięcia. Analogicznie możemy usunąć uchwyt zdarzenia:
RemoveHandler Przycisk.Click, AddressOf kliknij_mnie
Załóżmy, że utworzyliśmy kolekcję 30 kontrolek typu Button zapisaną w tablicy o nazwie: but(30) As button. Fragment procedury tworzącej kontrolki mógłby wyglądać tak:
For i = 0 To 29
‚Tworzymy nowy Button
but(i) = New Button
‚W bloku With … End With ustalamy poszczególne właściwości komponentu
With but(i)
‚Nazwa – but_ + wartości od 1 do 30. Format „D2″ sprawia, że dodane jest zero
‘wiodące, a więc nazwa będzie miała zawsze stałą długość i wyglądać będzie następująco:
‘but_01, but_02, … but_09, … but_30
.Name = „but_” + (i + 1).ToString(“D2”)
. . .
‘Kolejne polecenia
. . .
End With
‚Dodajemy adres obsługi zdarzenia Click
AddHandler but(i).Click, AddressOf klik
Next
Chcąc odczytać, w który przycisk kliknął użytkownik możemy posłużyć się poniższym przykładem.
Private Sub klik(sender As System.Object, e As System.EventArgs)
Dim nr As Integer = Int(Mid(sender.name, 5, 2)) – 1
End Sub
Nazwa przycisku zawsze będzie zawierała 6 znaków, przy czym dwa ostatnie to kolejny numer. Funkcja Mid odczytuje właśnie te dwa ostatnie znaki (czyli 5 i 6), które zostają zamienione przez funkcję Int na typ Integer. Indeksy tablicy zaczynają się od 0, a numery naszych przycisków od 1, stąd -1 na końcu. Zmienna nr będzie zawierała zatem numer kolejnego indeksu tablicy dla przycisku, który został kliknięty.
Listing kodu tworzącego kontrolki typu Panel z rozmieszczeniem ich co 6 stopni na obwodzie okręgu o promieniu 250.
‚TWORZENIE OBIEKTOW PANEL, KTORE POSLUZA JAKO „DIODY”
‚Zmienna kat wyznacza kąt od jakiego zaczniemy wyliczać położenia punktów X i Y
kat = 270
‚Pętla For: tworząca 60 nowy komponentów typu Panel
For i = 0 To 59
‚Tworzymy nowy Panel
dioda(i) = New Panel
‚W pętli With ustalamy poszczególne właściwości komponentu
With dioda(i)
‚Nazwa
.Name = „dioda” + (i + 1).ToString(„D2”)
‚Rozmiar
.Size = New Size(15, 15)
‚Tu obliczamy współrzędne dla kolejnych punktów położonych na okręgu o promieniu 250
x = 285 + (Cos(kat * (PI / 180)) * 250)
y = 275 + (Sin(kat * (PI / 180)) * 250)
‚Położenie
.Location = New Point(x, y)
‚Kolor
.BackColor = Color.Red
End With
‚Dodajemy nowo utworzony komponent do kolekcji kontrolek naszej Formy
Me.Controls.Add(dioda(i))
‚Zwiększamy licznik o 6 (360 stopni / 60 paneli, czyli każdy panel co 6 stopni)
kat += 6
If kat > 360 Then kat = 6
Next
Cały listing programu można pobrać pod tym adresem
Program w postaci pliku Exe można pobrać tutaj: