vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Fenster & Forms15.09.03
Form über X-Schaltfläche schließen

VB-Version:  VB5, VB6
 Views:  25.022 

Oft wird gefragt: Wie kann ich verhindern, dass eine Form über dieSchließen-Schaltfläche kommentarlos beendet wird? Man könnte jetzt auf die Idee kommen, diesen Schließen-Button einfach zu deaktivieren, so wie es in diesen Tippsbeschrieben ist:  Deaktivierung des Schließen-Symbols und  Deaktivierung des Schließen-Symbols II. Aber das möchte man nun auch nicht.

Im Grunde genommen will man nur verhindern, dass der Anwender vergisst seineDaten zu speichern bevor er das Programm beendet, oder man möchte erreichen, dass eine bestimmte Form mit Informationen eine gewisse Zeit geöffnet bleibt, oder, oder, oder.

Also wie verhindert man es nun? Hierzu muss man wissen, dass beim Klick aufdas Schließen-Symbol der QueryUnload-Ereignis ausgelöst wird. DiesesQueryUnload-Ereignis hat die folgenden Parameter:

  • Cancel As Integer
  • UnloadMode As Integer

Wenn das Cancel-Argument auf True gesetzt wird, kann dasbetroffene Formular nicht geschlossen werden. Über das UnloadMode-Argumentkann ermittelt werden, was das QueryUnload-Ereignis ausgelöst hat. Nachfolgendder Vollständigkeit halber eine Tabelle der möglichen Werte für das UnloadMode-Argument:

ArgumentWertBedeutung
vbFormControlMenu0Der Schließen-Befehl wurde aus dem Systemmenü gewähltoder über die Schließen-Schaltfläche der Titelleiste
vbFormCode1Per Code wurde die Unload-Methode ausgeführt
vbAppWindows2Windows wurde beendet
vbAppTaskManager3Programm wird durch den Task-Manager beendet
vbFormMDIForm4Das MDI-Hauptformular wurde geschlossen und dadurch auchalle Unterformulare
vbFormOwner5Ein Unterformular wird geschlossen, weil das übergeordneteFormular geschlossen wurde

Nun könnte man ja sagen - o.k., ich setz Cancel auf True und fertig. Dassieht dann ungefähr so aus:

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  If UnloadMode = vbFormControlMenu Then
    Cancel = True
  End If
End Sub

Das Problem ist jetzt nur, dass man die Form überhaupt nicht mehr über dieSchließen-Fläche geschlossen bekommt. Es sollte ja nur so sein, dass eineWarnung angezeigt wird. Versuchen Sie es mal so:

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Select Case UnloadMode
    Case vbFormControlMenu   ' oder Case 0
      ' falls Schaltfläche "Nein" gewählt wurde, Form nicht schließen
      If vbNo = MsgBox("Haben Sie alles gesichert?" & vbCrLf _
      & "Wollen Sie jetzt wirklich beenden?", _
        vbQuestion + vbYesNo, "Sind Sie sicher ???") Then
          Cancel = True
      End If
  End Select
End Sub

Diese Seite wurde bereits 25.022 mal aufgerufen.

nach obenzurück
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel