Odpiranje obrazcev iz vrstice za krmarjenje
WklNavBar uporabite na lastnem obrazcu za krmarjenje – v običajnem oknu obrazca ali pojavnem
oknu –, ki obrazce aplikacije odpira kot ločena okna, namesto da bi menjal stran v podobrazcu.
Ta stran prikazuje pot s kodo za vrstico, katere vnose oblikujete sami. Vrstica, vezana na tabelo za krmarjenje, sama odpira ciljne obrazce in sledi aktivnemu obrazcu brez spodnje kode: glejte Polnjenje vrstice za krmarjenje iz tabele.
Zahteva WKL Forms Object Library 1.24 ali novejšo različico.
Pregled rešitve
Vrstica ne pozna obrazcev, do katerih vodi: Navigate preda ključ izbranega vnosa, aplikacija pa
obrazec odpre z DoCmd.OpenForm (ki tudi aktivira obrazec, ki je že odprt). Vrstico in okna
usklajujejo trije deli aplikacije:
- Izbor sledi aktivnemu obrazcu. Vsak ciljni obrazec v
Form_Activatenastavi lastnost vrsticeSelectedKey. NastavitevSelectedKeys kodo ne sproži nobenega dogodka, zato to ne more začeti krmarjenja, ne glede na to, kako je uporabnik prišel do obrazca (prek vrstice, s Ctrl+F6, prek menija oken, s klikom na okno). - Obrazec za krmarjenje je lahko zaprt. Ciljni obrazec preveri, ali je obrazec za krmarjenje odprt, preden dostopi do vrstice; brez te preverbe
Forms("frmNavigation")odpove z napako 2450. - Neshranjene spremembe se preverijo v obrazcu izbranega vnosa.
BeforeNavigatezaDirtyvpraša obrazec, katerega ključ hraniSelectedKey– cilj, v katerem je uporabnik nazadnje delal –, in neScreen.ActiveForm: na pojavnem obrazcu za krmarjenje je aktivni obrazec obrazec za krmarjenje sam.
Izvedba
Modul obrazca za krmarjenje frmNavigation; ključi vnosov so imena obrazcev:
Private Sub navMain_BeforeNavigate(ByVal Key As String, Cancel As Integer)
Dim current As String
current = Me!navMain.Object.SelectedKey
If Len(current) = 0 Or current = Key Then Exit Sub
If Not CurrentProject.AllForms(current).IsLoaded Then Exit Sub
If Forms(current).Dirty Then
MsgBox "Najprej shranite ali zavrzite spremembe v obrazcu """ & Forms(current).Caption & """.", vbExclamation
DoCmd.SelectObject acForm, current
Cancel = True
End If
End Sub
Private Sub navMain_Navigate(ByVal Key As String)
DoCmd.OpenForm Key
End Sub
Modul vsakega ciljnega obrazca (frmNarocila, frmStranke, …):
Private Sub Form_Activate()
' The bar marks this form's entry; code raises no BeforeNavigate or Navigate.
If CurrentProject.AllForms("frmNavigation").IsLoaded Then
Forms!frmNavigation!navMain.Object.SelectedKey = Me.Name
End If
End Sub
Opombe
- Z okni dokumentov z zavihki in s prekrivajočimi se okni, kot ACCDB, ACCDE in v okolju Access Runtime, za običajni in za pojavni obrazec za krmarjenje velja:
- izbira odpre cilj, ponovna izbira že odprtega cilja ga aktivira;
- aktiviranje cilja s kodo ali s Ctrl+F6 premakne izbor brez
BeforeNavigatealiNavigate; - cilj z neshranjenimi spremembami prekliče izbiro, izbor pa ostane, kjer je;
- vrstica deluje s povečanim ciljem in s pomanjšanim obrazcem za krmarjenje;
- ko je obrazec za krmarjenje zaprt, aktiviranje cilja s preverbo
IsLoadedne sproži napake, brez nje pa sproži napako 2450.
- Ctrl+F6 lahko aktivira tudi sam obrazec za krmarjenje. Običajni obrazec za krmarjenje je kot vsak drug obrazec vključen v Accessovo kroženje oken; izbor tedaj ostane na zadnjem cilju, torej na obrazcu, h kateremu se uporabnik vrne. Pojavni obrazec v kroženje ni vključen.
- Bližnjična tipka pripada obrazcu vrstice.
ToggleShortcut(Ctrl+B) deluje, dokler ima fokus obrazec za krmarjenje, ne pa v ciljnem obrazcu; tam tipka ostane programu Access. Ponudite gumb za preklop ali v ciljnih obrazcih pokličiteTogglez lastno tipko. - Odpeta vrstica se odpre nad lastnim obrazcem. Razširjeni prekrivni sloj leži nad oknom obrazca za krmarjenje, tudi ko je aktiven ciljni obrazec; to ni okno nad cilji.
- Kje ostane fokus po preklicu. Na običajnem obrazcu za krmarjenje fokus obdrži cilj, na pojavnem pa obrazec za krmarjenje.
DoCmd.SelectObjectv primeru v obeh primerih postavi obrazec s spremembami v ospredje. - Zakaj je pri vrstici z oblikovanimi vnosi to koda aplikacije. Kateri obrazec ključ odpre, s katerimi
OpenArgs, filtrom ali načinom okna, in kaj šteje za neshranjeno (spremenjen zapis, odprto pogovorno okno, uvoz, ki teče), ve samo aplikacija. Naloga vrstice je, da lahko koda neopazno sledi oknom in da je izbiro mogoče preklicati.
Sorodne teme
- Polnjenje vrstice za krmarjenje iz tabele – ciljni obrazci brez kode
- Zadržanje uporabnika na strani z neshranjenimi spremembami – ista preverba za podobrazec strani
- Referenčni priročnik API (v angleščini): WklNavBar (
SelectedKey,BeforeNavigate,Navigate,ToggleShortcut)