Tatry
Szczyty, doliny, jaskinie... Opisy oraz fotografie wykonane podczas moich górskich wycieczek...
Więcej...
19.02.2020
ŚRODA

 

(02) – Dynamiczne tworzenie komponentów (kontrolek) na przykładzie aplikacji: zegar

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

Pobierz: Listing Dynamiczne Komponenty
Pobrano: 166,
Rozmiar: 4.6 KB,
Data: 12.Mar.2016
Wystarczy skopiować całość i po utworzenie nowego projektu w VB wkleić do niego nowy kod.

Program w postaci pliku Exe można pobrać tutaj:

Pobierz: Zegar
Pobrano: 185,
Rozmiar: 22 KB,
Data: 12.Mar.2016