Zapobieganie zamykaniu programu

Opis problemu

Podczas normalnej pracy z naszym programem, zdarza się, że użytkownik przez przypadek kliknie nie ten “x” co trzeba, szczególnie jeśli działa na zmaksymalizowanych oknach i przez przypadek wyjdzie z programu. Oczywiście to tylko jedna z możliwości, ale jedno co trzeba przyznać to to, że warto zapytać usera czy rzeczywiście kończy pracę.

Nie ma na to jednego sposobu, Access nie udostępnia zdarzenia przy zamknięciu aplikacji. Ja proponuje wykorzystać wiedzę o środowisku do rozwiązania tego problemu. Kluczem do sukcesu jest zrozumienie, że w momencie zamknięcia MsAccess będzie zamykał wszystkie otwarte formularze. Podczas zamknięcia formularza wywoływane jest zdarzenie Form_Unload, które moze być anluwane z poziomu VBA poprzez zmiane zmiennej Cancel na 1.

Rozwiązanie

Stwórzmy formularz o nazwie AppExit, który w zdarzeniu Form_Unload będzie pytał użytkownika, czy chce wyjść z programu, jeśli odpowiedź będzie negatywna, wtedy zdarzenie zostanie anulowane. Kod VBA będzie przedstawiał się następująco:

Private Sub Form_Unload(Cancel As Integer)
    If MsgBox("Czy chcesz wyjść z programu?", vbYesNo + vbQuestion + vbDefaultButton2, "") = vbNo Then
        'Skoro nie chce wyjść z programu to anulujmy zdarzenie unload
        Cancel = 1
    Else
        'miejsce na kod niezbedny do wykonania podczas zamkniecia
    End If
End Sub

Teraz pozostaje nam odpalić ten formularz przy starcie programu. Oczywiście nie chcemy też, aby użytkownik go widział podczas normalnej pracy, bo tylko by mu przeszkadzał. Otwarcie formularza podczas uruchomienia można zrealizować na przykład poprzez stworzenie makra AutoExec:

Makro: AutoExec

Tu wykorzystujemy kolejną właściwość MsAccess, mianowicie podczas uruchomienia pliku bazy, access sprawdza czy nie ma makra o nazwie AutoExec, jeśli jest, to je uruchamia.

Efekt: teraz przy próbie wyjścia poprzez przycisk “x”, użytkownik zostanie zapytany o celowość swoich działań.
Plik z realizacją dostępny pod tym linkiem

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

WordPress SEO fine-tune by Meta SEO Pack from Poradnik Webmastera
Skip to toolbar