Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Form nach Prüfung schließen funktioniert nicht (https://www.delphipraxis.net/142912-form-nach-pruefung-schliessen-funktioniert-nicht.html)

globetrotter77 5. Nov 2009 22:18


Form nach Prüfung schließen funktioniert nicht
 
Hallo zusammen!
Ich habe ein seltsames Problem, mit dem ich, wie ich meine, so noch nie konfrontiert wurde.

Im OnShow-Event eines Formulars, das ich mit ShowModal aufrufe, führe ich eine Prüfung durch, die unter bestimmten Bedingungen dazu führen soll, dass das Formular sofort wieder geschlossen wird.
Hierzu setze ich in diesem Fall

ModalResult:=mrCancel

Aber dies hat leider keinerlei Auswirkungen, das Formular wird trotzdem angezeigt und wartet auf Eingaben.
Wenn ich dagegen einen Schließen-Button betätige, passiert eigentlich genau das Gleiche:
Ich setze wieder

ModalResult:=mrCancel

und siehe da - diesmal wirkt es, und das Formular ist weg!

Woran kann das liegen?

Danke für jeden Tipp!

Luckie 5. Nov 2009 22:24

Re: Form nach Prüfung schließen funktioniert nicht
 
Überlege doch mal, was du da eigentlich machst. Du sagst Windows es soll dein Fenster anzeigen und gleichzeitig sagst du ihm er soll es schließen. Und warum machst du die Überprüfung nicht bevor du das Fenster überhaupt erzeugst bzw. anzeigst? Ich meine, wenn ich in mein Auto einsteige, dann gucke ich ja auch schon vorher, ob ich den Schlüssel habe und gucke nicht erst, wenn ich einsteige. Und selbst, wenn ich erst beim Einsteigen gucke, ob ich den Schlüssel habe, kann ich mich nicht gleichzeitig anschnallen und aussteigen.

mirage228 5. Nov 2009 22:29

Re: Form nach Prüfung schließen funktioniert nicht
 
Schreib Dir eine eigene Methode als public ins Form, die ShowModal() aufruft und auswertet (oder halt entscheidet, ShowModal nicht aufzurufen). Die Rückgabe dieser Funktion kannst Du ja weiterhin als Integer machen, sodass du mrCancel etc. zurückgeben kannst.

globetrotter77 5. Nov 2009 22:34

Re: Form nach Prüfung schließen funktioniert nicht
 
@Luckie:
Da hast du natürlich recht!
Irgendwie scheint das keinen richtigen Sinn zu ergeben, aber es gab eben dennoch Gründe dafür.
Klar kann ich das auch anders machen, aber ich will eben auch verstehen, wieso kein Close funktioniert.
Und der funktioniert tatsächlich nicht, auch dann nicht, wenn man ihn direkt einprogrammiert.
So, und nun stelle man sich mal vor, dass beim Show irgendeine Aktion durchgeführt werden soll, die aus nicht vorhersehbaren Gründen nicht klappt - da wäre ja irgendeine Reaktion erforderlich, oder?
Und die wäre bei mir eben sofortiges Schließen gewesen.

Es bleibt also die Frage, wieso das nicht funktioniert!
Scheint ja irgendwie mit dem aktuellen Event zusammenzuhängen ...

Progman 5. Nov 2009 22:41

Re: Form nach Prüfung schließen funktioniert nicht
 
Im OnShow kann man einfach kein Close aufrufen, genausowenig wie man im OnClose Show aufrufen kann.
Das passt einfach nicht ;)

globetrotter77 5. Nov 2009 22:43

Re: Form nach Prüfung schließen funktioniert nicht
 
Zitat:

Zitat von Progman
Im OnShow kann man einfach kein Close aufrufen, genausowenig wie man im OnClose Show aufrufen kann.
Das passt einfach nicht ;)

Das wäre natürlich eine Erklärung, wenn das per definitionem ausgeschlossen ist.
Es bleibt dann allerdings die Frage, ab wann man Close aufrufen kann ... weißt du da was Genaueres?

RWarnecke 5. Nov 2009 22:43

Re: Form nach Prüfung schließen funktioniert nicht
 
Wenn ich ein Fenster mit ShowModal aufrufe, nutze ich das nur dazu um Werte zu überprüfen oder zu ändern. Der eigentliche Ablauf, wie Überpüfungen, Berechungen u.s.w. werden in der Hauptunit gemacht, die das Fenster mit ShowModal aufruft. Dadurch komme ich erst garnicht in die Verlegenheit, irgendwelche Prüfroutinen in die Unit des ShowModal-Fenster zu schreiben.
Bei sind die die ShowModal-Fenster Units in 99% der Fälle nicht größer als die Unit selber mit der Form und dessen Kommponenten.

Edit:
Zitat:

Zitat von globetrotter77
Es bleibt dann allerdings die Frage, ab wann man Close aufrufen kann ... weißt du da was Genaueres?

Ich nehme mal an vielleicht im OnPaint oder OnResize. Musste mal ausprobieren.

Luckie 5. Nov 2009 22:44

Re: Form nach Prüfung schließen funktioniert nicht
 
Zitat:

Zitat von globetrotter77
aber ich will eben auch verstehen, wieso kein Close funktioniert.

Da gibt es nichts zu verstehen. Es geht einfach nicht. Genauso wenig wie es nicht geht, dass ich durch die geschlossene Autotür den Schlüssel ins Zündschloss stecken kann.

Zitat:

Und der funktioniert tatsächlich nicht, auch dann nicht, wenn man ihn direkt einprogrammiert.
Du glaubst uns nicht, oder? ;)

Zitat:

So, und nun stelle man sich mal vor, dass beim Show irgendeine Aktion durchgeführt werden soll, die aus nicht vorhersehbaren Gründen nicht klappt - da wäre ja irgendeine Reaktion erforderlich, oder?
Klar, aber du kannst diese Aktion auch vor das Erzeugen des Fensters verlegen. Es gibt keinen Grund dies im OnShow Ereignis zu tun.

Zitat:

Es bleibt also die Frage, wieso das nicht funktioniert!
Scheint ja irgendwie mit dem aktuellen Event zusammenzuhängen ...
Siehe oben.

globetrotter77 5. Nov 2009 22:51

Re: Form nach Prüfung schließen funktioniert nicht
 
Zitat:

Zitat von RWarnecke
Wenn ich ein Fenster mit ShowModal aufrufe, nutze ich das nur dazu um Werte zu überprüfen oder zu ändern.

Nun gut, das ist aber auch eine philosophische Frage ... ganz nebenbei bemerkt sind fast alle Teile eines Programms dazu da, um Werte zu überprüfen oder zu ändern ... ;-)
Ich fand bisher ShowModal immer dann ganz gut, wenn es z.B. darum ging, eine Auswahl zu treffen, weil dann tatsächlich eine klare Kapselung des untergeordneten Problems stattfand ...
wenn jetzt allerdings der Benutzer sich etwas spät entscheidet, doch keine Auswahl zu treffen, dann muss ich doch irgendwie reagieren dürfen, oder?

globetrotter77 5. Nov 2009 22:54

Re: Form nach Prüfung schließen funktioniert nicht
 
Zitat:

Zitat von Luckie
Du glaubst uns nicht, oder? ;)

Unsinn! Natürlich glaube ich euch, sonst wäre ich ja nicht hier, aber es irritiert mich trotzdem, wieso es nicht geht ... irgendwie bilde ich mir ein, dass es hierfür einen Weg geben müsste


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz