proba

Powrót do wyboru kursów

Dynamiczne tworzenie komponentów (kontrolek)

na przykładzie aplikacji: zegar

 

    tuytuysaadadsasdasdasdasd

    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 nazwy będą wyglądały 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ę np. poniższym przykładem.

    Private Sub klik(sender As System.Object, e As System.EventArgs)

    Dim nr As Integer = Int(Mid(sender.name, 3, 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, 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 petli 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

    [download url=”http://www.programista.biz/FTP/Kurs_VB/L_01/Listing/Listing_Dynamiczne_komponenty.txt”]
    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:

    [download url=”http://www.programista.biz/FTP/Kurs_VB/L_01/Program/zegar.exe”]