Ustvarjanje dogodkovnih procedur za kontrolnik
Dogodek kontrolnika WKL, na primer NodeSelect kontrolnika WklTreeView, ValidateCell kontrolnika WklGrid ali
Click kontrolnika WklButton, obravnavajte v modulu obrazca.
Zahteva WKL Forms Object Library 1.23 ali novejšo različico.
Pregled rešitve
Access dogodkov kontrolnika ActiveX nikoli ne navede na zavihku Dogodek lista z lastnostmi. Dogodkovne procedure
ustvarite s seznamoma objektov in procedur v oknu s kodo – za vsak kontrolnik WKL – pri kontrolnikih družine dreves
in mrež pa tudi na strani oblikovalnika Dogodki (vrstica EventProcedures lista z lastnostmi):
| Kontrolnik | Stran oblikovalnika Dogodki (EventProcedures) | Seznama objektov in procedur v oknu s kodo |
|---|---|---|
WklTreeView, WklTreeList, WklGantt, WklGrid, WklPropertyGrid | Da | Da |
WklSplitter, WklDockLayout, WklStatusLabel, WklNavBar, WklButton, WklValidator, WklToggleSwitch, WklTokenBox, WklBadge | Ne | Da |
WklToast, WklLinkManager (objekta, ne kontrolnika) | Ne | Samo za spremenljivko WithEvents na vrhu modula razreda ali obrazca |
Obrazec mora imeti modul (Ima modul = Da); obrazec brez modula ne prejme dogodkov nobenega kontrolnika.
Izvedba
Z oblikovalnikom (družina dreves in mrež):
- V pogledu načrta izberite kontrolnik in v listu z lastnostmi odprite zavihek Drugo.
- Kliknite
[...]v vrsticiEventProcedures. Stran Dogodki navede vsak dogodek s kratkim opisom in označi tiste, ki že imajo proceduro. - Izberite dogodek (iskalno polje na vrhu filtrira seznam) in kliknite Ustvari / odpri proceduro ali dvokliknite dogodek.
- Stran zaprite z V redu. Access ustvari proceduro in na njej odpre okno s kodo.
Z oknom s kodo (vsak kontrolnik): odprite modul obrazca (Ogled kode), na seznamu objektov izberite
kontrolnik (na primer Tree1), na seznamu procedur pa dogodek. Za objekt, kot je WklToast, najprej deklarirajte
spremenljivko na ravni modula; nato se prikaže na seznamu objektov:
Private WithEvents mToast As WklToast ' at the top of the module, not inside a procedure
Private Sub Form_Load()
Set mToast = New WklToast
End Sub
Procedura dobi podpis iz knjižnice tipov:
Private Sub Tree1_NodeDrop(ByVal SourceKey As Variant, ByVal TargetKey As Variant, _
ByVal Position As WklDropPosition, ByVal Effect As WklDropEffect, Cancel As Integer)
If MsgBox("Želite premakniti to vozlišče?", vbYesNo) = vbNo Then Cancel = True
End Sub
Opombe
- Procedura se ustvari šele, ko kliknete V redu; Prekliči zahtevo zavrže. Dokler je okvir z lastnostmi odprt, Accessa ni mogoče poklicati nazaj.
- Vrstica
EventProceduresprikazuje, koliko dogodkov ima proceduro; vnos vanjo nima učinka. - Dogodki sporočajo dejanja uporabnika; iste operacije, poklicane iz kode, ne sprožijo dogodkov.
- Ročno vnesena procedura mora imeti parametre dogodka, kot jih navaja referenčni priročnik API, v enakem številu in vrstnem redu, na primer
treMain_BeforeUpdate(ByVal Key As Variant, ByVal Action As WklUpdateAction, Cancel As Integer). Sicer:- Deklaracija z drugačnim številom parametrov –
BeforeUpdate(ByVal Action As Long)– prepreči prevajanje celotnega modula obrazca, s sklicem na knjižnico tipov ali brez njega. - Tip naštevanja, kot je
WklUpdateAction, potrebuje sklic na WKL Forms Object Library (Orodja › Sklici). Access ga nastavi, ko kontrolnik vstavite ročno; obrazec, naložen zLoadFromText, ga ne, brez njega pa se tudi pravilna deklaracija ne prevede.Longnamesto naštevanja se prevede s sklicem ali brez njega.- Da se modul ne prevede, ni nikjer sporočeno:
RunCommand acCmdCompileAndSaveAllModulesne sproži napake,DoCmd.OpenForm, poklican prek avtomatizacije, pa se vrne, ne da bi odprl obrazec. Po prevajanju preveriteApplication.IsCompiled. Stran oblikovalnika in seznama v oknu s kodo deklaracijo vedno zapišejo pravilno.
Sorodne teme
- Dogodki posameznega kontrolnika: razdelek „Events“ na njegovi strani v referenčnem priročniku API (v angleščini)