W tej części kursu opiszę najważniejsze zdarzenia formularza i jego kontrolek. W zdarzeniach możemy umieścić kod, który uruchomi się automatycznie w odpowiedzi na działanie użytkownika.Jest to główna metoda programowania formularzy. Ostatecznie taka jest ich filozofia, program wyświetla pewien szablon przed użytkownikiem i czeka na jego reakcję. Użytkownik może zacząć wypełniać pierwsze pole, może zacznie od drugiego, może kliknie od razu ok albo się rozmyśli i zamknie okno. Wszystkie te działania uruchamiają określone zdarzenia.
Kod zdarzeń umieszczamy w pliku kodu formularza. Możemy go włączyć wybierając View Object po kliknięciu prawym przyciskiem na formularzu w drzewku projektu.
Przełączać się pomiędzy widokiem formularza a kodem formularza możemy używając na zmianę F7 i shift + F7 albo wybierając View Code lub View Object w powyższym menu.
Dodawanie zdarzeń
Dodawaniem zdarzenia nazywamy wypełnianie go kodem w pliku kodu formularza. Najłatwiej dodać kod do zdarzenia Click. Wystarczy dwa razy kliknąć kontrolkę na formularzu w trybie edycji.
W przypadku pól tekstowych zostanie dodane zdarzenie Change, które jest ważniejsze dla tego typu kontrolki. O tym jednak w dalszej części kursu.
Inne zdarzenia też można bardzo łatwo dodać.
- Otwieramy widok kodu danego formularza.
- Na górnej liście wybieramy interesującą nas kontrolkę lub sam formularz. Widać na tej liście tylko kontrolki z formularza wybranego w drzewku projektu.
- Prawa lista jest wtedy uzupełniana o zdarzenia związane z daną kontrolką. Po wybraniu pozycji z prawej listy, zdarzenie zostaje dodane do pliku.
Jak widać w trakcie zostało dodane zdarzenie Click (jeszcze go nie było). Jest to swego rodzaju „ułatwienie”. Zdarzenie Click występuje prawie zawsze, ponieważ myszka jest podstawową metodą poruszania się po formularzu. Jeżeli nie chcemy programować tego zdarzenia, można je usunąć.
Pomoc do zdarzeń
Dokładny opis każdego zdarzenia otrzymamy po zaznaczeniu jego nazwy i kliknięciu F1.
W przypadku zdarzeń bardzo istotne są argumenty. Dzięki nim wiemy np. gdzie była myszka w momencie naciśnięcia przycisku albo jaka litera została wpisana w polu tekstowym. Dodatkowo, modyfikując wartość argumentów możemy wpływać na proces, w którym znajduje się zdarzenie. Na przykład zapobiegać zamknięciu formularza po kliknięciu krzyżyka.
Wszystkie strony pomocy wyglądają podobnie:
Strona pomocy zaczyna się od opisania sytuacji, w których dane zdarzenie występuje.
W części Syntax opisana jest składnia zdarzenia. Znajdziemy tam kolejność argumentów. Po dodaniu zdarzenia, to wszystko wpisywane jest automatycznie.
W części Settings znajdziemy dodatkowe wyjaśnienia dotyczące argumentów. W powyższym przykładzie dowiemy się, że argument button może przyjmować wartości 1,2 lub 4, zależnie, który przycisk myszki został wciśnięty.
Ostatnia część to Remarks, czyli dodatkowe uwagi, opisujące ogólny kontekst zdarzenia.
Najważniejsze zdarzenia
Jak w przypadku atrybutów, zobaczymy teraz najważniejsze, uniwersalne zdarzenia.
Click,
Zdecydowanie najczęściej używane zdarzenie. Umieszczamy w nim kod, który ma się wykonać po kliknięciu kontrolki myszką. Używamy go więc przede wszystkim dla wszystkich przycisków. Istnieje także kilka innych zdarzeń związanych z myszką, które wykonują się w określonej kolejności.
- MouseDown
- MouseUp
- Click
- DblClick
Change
Wywołuje się, kiedy zmienia się atrybut Value. Może to być spowodowane działaniem użytkownika, lub wykonaniem programu. Wydarzenie to może być używane do synchronizacji wartości różnych kontrolek. Poniżej pole combo jest filtrowane wartościami z pola tekstowego w czasie rzeczywistym.
Można to uzyskać w poniższy sposób (na formularzu są dwie kontrolki Txt_Filter i Lbx_MonthList).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Private Sub Txt_Filter_Change() AddItems End Sub Private Sub UserForm_Initialize() AddItems End Sub Private Sub AddItems() Dim lr_Cell As Range Lbx_MonthList.Clear For Each lr_Cell In Worksheets("Sheet2").Range("A1:A12").Cells If lr_Cell Like "*" & Txt_Filter & "*" Then Lbx_MonthList.AddItem lr_Cell End If Next lr_Cell End Sub |
Initialize
Zdarzenie się uruchamia, kiedy pojawia się formularz. Kod wykona się, zanim użytkownik będzie miał szansę wykonać cokolwiek na formularzu. Możemy więc wykonać tutaj dodatkowe czynności przygotowujące. Na przykład wypełnić pola combo, albo pobrać dane z bazy danych.
QueryClose
Uruchamia się przed zamknięciem formularza. Możemy tutaj wykonać dodatkowe czynności „sprzątające” lub zadać standardowe pytanie „Czy jesteś pewien?”.
1 2 3 4 5 |
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If MsgBox("Czy na pewno zamknąć", vbYesNo) = vbNo Then Cancel = vbTrue End If End Sub |
Jak widać powyżej, jeżeli ustawimy argument na True, proces zamykania będzie przerwany i formularz pozostanie otwarty.
KeyDown, KeyPress, KeyUp
Zestaw zdarzeń związanych z naciskaniem klawisza. Wywołują się w określonej kolejności:
- KeyDown
- KeyPress
- KeyUp
Na szczęście może nam też w tym pomóc funkcja Chr(). Opisana w części kursu o funkcjach wbudowanych. Tłumaczy ona kod znaku na znak widoczny na klawiaturze.