UITDAGING: Cancel "enter event" bij klikken op een tab van een navigatieformulier

Status
Niet open voor verdere reacties.

hausi

Gebruiker
Lid geworden
17 jan 2010
Berichten
84
Ik probeer een controle in te bouwen waarbij gevraagd wordt of je echt het huidige formulier wilt verlaten omdat dan alle data die is ingevuld, verloren gaat.
Dat is in het kort wat ik wil, nu de opbouw van de formulieren

Ik heb een frmHoofdmenu met daarin een Access Navigatieformulier. Onder een van de navigatietabs bevind zich een formulier met daarop een Tab Control.
De Tab Control heeft 5 tabs met onder elke tab een ander subformulier die samen een meldingsformulier vormen. De formulieren zijn allemaal "Niet Afhankelijk" en alle data die op deze formulieren wordt ingevoerd wordt in 1 tabel geschreven.
Dit heb ik allemaal goed werkend maar het zou kunnen dat een gebruiker per ongeluk op een tab van het Access Navigatieformulier klikt wat betekent dat een ander formulier wordt geopend en alle ingevulde data op het meldingsformulier verloren gaat omdat deze "Niet Afhankelijk" zijn.

De event volgorde bij het per ongeluk klikken op een tab van het Access Navigatieformulier is: Enter Event tab Navigatieformulier, Unload Event meldingsformulier, Close Event meldingsformulier.
Zoals ik er naar kijk zou ik dus het Enter Event van de tab van het Access Navigatieformulier moeten ondervangen omdat op dat moment het meldingsformulier nog open en in het geheugen is. Het probleem is echter dat ik niet weet hoe je dat doet. Als ik Cancel = True gebruik, opent het formulier onder de aangeklikte tab toch gewoon.

Is hier een oplossing voor te bedenken of moet ik het probleem op een andere manier aanpakken?

Alvast bedankt voor het meedenken.
Hans
 
Is ergonomie hier niet de oplossing ?

Zolang het formulier nog niet volledig is ingevuld biedt het formulier geen mogelijkheid het te verlaten.
Als het formulier volledig is ingevuld verschijnt een knop onderaan het formulier om de gegevens op te slaan.
Die doet dan na klikken het werk.
 
@snb

Je brengt me op een idee....... ik zal eens proberen de navigatie tabs uit te schakelen..... wat weer andere uitdagingen met zich meebrengt maar goed, toch eens proberen.
Andere ideeën blijven natuurlijk welkom :-)
 
Onder een van de navigatietabs bevind zich een formulier met daarop een Tab Control.
De Tab Control heeft 5 tabs met onder elke tab een ander subformulier die samen een meldingsformulier vormen. De formulieren zijn allemaal "Niet Afhankelijk" en alle data die op deze formulieren wordt ingevoerd wordt in 1 tabel geschreven.
Als ik dit lees, kruip ik rillend van ellende onder de wol en kom ik er pas weer uit als ik gekalmeerd ben met (minstens) een halve fles wodka.... Wat is dat voor systeem? Het ergste vind ik nog dat je met 5 onafhankelijke formulieren in één tabel werkt.... Nergens voor nodig, maak één formulier, koppel dat aan de tabel en zet daar alle velden op. Desnoods op een tabcontrol met 5 bladen. Wat is dat toch met Access gebruikers die denken dat ze op elk tabblad een apart formulier moeten zetten? :). Als je op elk tabblad ook nog eens minstens één verplicht veld hebt staan, is het ook nog eens onmogelijk om het record niet op te slaan, en bestaat je probleem niet eens...
 
Goedemorgen Octafish,
Ik hoop dat je geen kater hebt van de wodka :p.
Ik heb eerst gewerkt met 1 formulier maar ik had domweg niet genoeg ruimte omdat een Access formulier niet langer kan zijn dan 56 cm, en dat was niet genoeg.
Bovendien is het invullen van een formulier van die afmetingen niet erg gebruiksvriendelijk en dat moet het absoluut zijn.
Ik heb dus 5 formulieren ontworpen, ze in een tab control onder gebracht zodat de gebruiker een goed overzicht heeft en het makkelijk kan invullen.
Dat is onder meer ook de reden waarom ik het onafhankelijk heb gemaakt, ik maak het zo mogelijk alle data van de verschillende formulieren relatief eenvoudig in één
tabel op te slaan én je stelt zo absoluut zeker dat de tabel niet vervuild wordt met onvolledige records.
Ik heb inmiddels het idee van @snb uitgewerkt, als je op de betreffende tab van het Access Navigation Form klikt, opent het formulier waarop de tab control zich bevindt,
worden de tabs van het Access Navigation Form uitgeschakeld en kan het samengestelde meldingsformulier niet meer worden verlaten voordat op "Opslaan" is geklikt.
Wel geef ik de mogelijkheid om op de knop "Annuleren" te klikken en zo het formulier te verlaten zonder het in te vullen.
Dat werkt goed maar ik vind het niet de elegantste oplossing. Liever ondervang ik het moment waarop het formulier verlaten dreigt te worden, en laat de gebruiker de
keuze wat te doen.

Heb jij een idee?
Hans
 
Ik heb eerst gewerkt met 1 formulier maar ik had domweg niet genoeg ruimte omdat een Access formulier niet langer kan zijn dan 56 cm, en dat was niet genoeg.
Bovendien is het invullen van een formulier van die afmetingen niet erg gebruiksvriendelijk en dat moet het absoluut zijn.
Zoals ik al zei: je kunt perfect met een tabcontrol werken op één formulier. Bij mij is een formulier nooit groter als één scherm, en als de velden er niet oppassen, of de layout onduidelijk is: tabcontrol! Jou oplossing? Het is maar goed dat de fles nog half vol is :D.
 
Ik begrijp je niet ben ik bang.
Waar ga ik volgens jou de fout in?
Blijft nog steeds het probleem.....
 
Je 'probleem' is volledig 'self-inflicted' vrees ik. Jij denkt dat je voor het werken met een tabcontrol aparte formulieren nodig hebt en daarom heb jij 5 aparte formulieren gemaakt, voor elk tabblad één. Ik zeg: dat is onzin en niet nodig. Maak één formulier met een tabblad control en zet daar direct je velden op.
 
OK, daar heb je volkomen gelijk in, daar ben ik net achter gekomen :(
Maar goed, afgezien van een draak van een opzet van formulieren, het kan nog steeds voorkomen dat de gebruiker op een tab van het Access Navigation Form klikt en weg zijn de gegevens.
En als ik het formulier koppel aan de tabel heb ik onvolledige records.
Hoe kan ik dat ondervangen?
 
Laatst bewerkt:
Zie bericht #4 :). Maar het kan netter... sowieso dus één formulier met een foutafvanging gebruiken.
 
Na veel pogingen is het me nog steeds niet gelukt.
De situatie is nu: Hoofdformulier met een Access Navigation Form, onder een van de tabs van het Access Navigation Form een formulier met een tab control.
Het tab control heeft 5 tabs met onder elke tab een aantal onafhankelijke velden die samen een melding vormen en als één record in een tabel worden geschreven.

Wanneer een gebruiker per ongeluk op een tab van het Access Navigation Form klikt, sluit het formulier dat op dat moment open is en opent het formulier onder de betreffende tab.
Dit wil ik voorkomen omdat alle onafhankelijke velden van de melding dan leeg worden gemaakt.
Ik denk dat ik moet onderstrepen dat het formulier met het tab control, deel uitmaakt van een "Access Navigation Form" wat een aantal specifieke kenmerken heeft.

Ik heb geprobeerd het sluiten van het formulier te voorkomen bij "Enter Event" van de tabs van het "Access Navigation Form" omdat dat de handeling is die het formulier zal sluiten.
Code:
Private Sub navJournaal_Enter()
If MsgBox("Wil je de melding afbreken?" & vbNewLine & "Alle data zal verloren gaan.", vbOKCancel) = vbCancel Then
    DoCmd.CancelEvent
End If
Ik krijg keurig de msgbox te zien maar als ik op Cancel klik opent even zo goed het formulier onder die tab.

Dan maar het "Unload Event" van het formulier met het tab control, dat dus niet mag sluiten, geprobeerd.
Code:
Private Sub Form_Unload(Cancel As Integer)
If MsgBox("Wil je de melding afbreken?" & vbNewLine & "Alle data zal verloren gaan.", vbOKCancel) = vbCancel Then
    Cancel = True
End If

End Sub

Maar ook dat werkt niet.
Ik heb dit soort code geprobeerd bij talloze events maar niets lijkt te werken.

Iemand ideeën?
 
Jawel, post de db er eens bij. Ik heb namelijk weinig tijd/zin om deze situatie na te bouwen.
 
Dat begrijp ik, Hier staat de db.
Wil je me even een berichtje sturen als je hem binnen hebt? Dan haal ik hem weer weg.
Je kunt de db openen met "shift". Als je dan frmHoofdmenu opent verschijnt het hoofdscherm.
Onder de navigatietab ATMSR is het formulier met de tab control. Bij het invullen moeten alle tabs worden doorlopen en als bij de laatste tab de datum wordt ingevoer, komt de opslaan knop beschikbaar.
Als je nu op een tab van het navigatie formulier drukt sluit de pagina en dat wil ik ondervangen.

Ik vind het fijn dat je er naar wilt kijken, ik ben aan het eind van mijn Latijn.
Hans
 
Laatst bewerkt:
Ik heb de db opgehaald. Zal er dit weekend naar kijken!
 
Ik heb een eerste (vluchtige lijkt mij hier toepasselijk ;) ) blik geworpen, en mij valt op dat de db slecht (zeg maar rustig: niet) is genormaliseerd. Dat raad ik je toch echt aan, want nu heb je een hopeloze hoeveelheid overbodige (want dubbele) velden in je tabel staan waar ik persoonlijk niet vrolijk van zou worden. Neem als voorbeeld de blokken Callsign1 .. Callsign4. Alle velden met een getal er achter zijn dubbel.
Mijn oplossing is dan: gerelateerde tabel gebruiken voor de calls. Ben je ook gelijk van de limiet van 4 calls af, mocht dat wenselijk zijn.
Iets vergelijkbaars met de relatie met personen: van de melder sla je (als ik het goed interpreteer) zo'n 12 gegevens op. Mij lijkt 1 voldoende: het MelderID. De rest staat in de personentabel.
De velden DB1Naam en DB2Naam combineren bovenstaande problemen, en zijn dus eigenlijk dubbel zo erg!

Deze zaken hebben an sich niet zoveel met je probleem te maken, maar ik wou ze toch even meegeven voor het weekend :).
 
Ik heb een groot deel van jouw cursus gelezen en weet dat de normalisatie maar magertjes is, ik werk met een databasebase die al enkele jaren geleden door iemand is ontworpen die niet meer werkzaam is bij mijn afdeling.
Ik wilde je een PM maar dat lukt niet ondanks dat ik heb gedoneerd, daar heb ik de mod een bericht over gestuurd.
Ik zou je dan iets beter kunnen vertellen wat een ATMSR inhoudt en waarop het zo is opgebouwd, jou ideeën daarover zou ik erg op prijs stellen, ik ben werkzaam bij de
luchtverkeersleiding en ben geen Access expert.
 
Jouw PM komt wel aan, maar ik kan je niet antwoorden......
Systeembericht
Alleen verenigingsleden en donateurs kunnen privé-berichten sturen
 
Dat is dan duidelijk.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan