Benutzer mit den meisten Antworten
Formular lässt sich trozt beendeter runtime nicht schließen

Frage
-
Hallo Community,
Ich habe eine Software geschrieben, die ich über ein prg starte. In der Entwicklung muss ich das ein oder andere Formular testen um dessen funktionalität zu bestätigen (selbstverständlich!)
Nun habe ich aber den kurriosen fall, dass ich auf einen Fehler laufe, desswegen im debugger nachschaue, den fehler finde, auf den stop-butten des debuggers klicke und anschließend das formular beenden will.
Das kurriose dabei ist, dass das fenster sich aber nicht schließen lassen will.. über die comandozeile sehe ich mit _screen.activeform, dass es devinitiv noch läuft, aber wie kann das sein, wenn ich doch die runntime beendet habe.. und forallem wieso kann ich dann _screen.activeform.releas() ausführen, ohne dass sich das fenster schließt??
Ich habe keine lust für jeden kleine test ständig die komplette ide neu zu starten.. Hat jemand schon mal was ähnliches erlebt und hat tips für mich wonach ich gucken könnte um dieses zu beheben?Donnerstag, 4. September 2014 14:50
Antworten
-
Führe im Command Window CLEAR ALL aus.
Das Beenden des Debuggers beendet nicht die Runtime, die Runtime läuft überhaupt nicht, wenn Du in der IDE bist, es läuft die VFP9.exe, die IDE selbst. Und die läuft ja noch. Wenn Du in der IDE bist, wird weder die vfp9r.dll noch wird die vfp9rdeu.dll als Resource-Datei herangezogen. Das wären die Dateien, die man Runtime nennt, oder auch die vfp9t.dll. Die werden aber erst von einer von VFP compilierten EXE oder DLL herangezogen. Nebenbei: Es gibt neben den vfp9Rxxx.dll Sprachresource-DLLs noch vfp9xxx.dll Sprachresourcedateien, die von der VFP9.exe herangezogen werden und von MS gibt es dazu nur vfp9enu.dll, deswegen liefert CMONTH() z.B. innerhalb VFP9.exe nur englische Monatsnamen, während der Laufzeit einer EXE aber dann je nach Sprach-Resource DLL, die per Default entsprechend der Windows-Sprache herangezogen wird. Auch per _vfp.startmode kannst Du sehen, wie VFP gestartet ist und erst die Modi ab 2 bedeuten die Runtime läuft. Daneben spricht man noch von design time und run time, wenn der Unterschied für manche Methoden oder Properties wichtig ist, manches ist zur run time readonly, das kann zur Verwirrung beitragen, aber bevor ich abdrifte...
Auch der Toolbar Stop Button beendet nur den aktuellen code, nicht irgendwelche Objekte oder Formulare.
Wenn ein Formular selbst mit seinem Close Button nicht mehr schließt, dann gibt es noch irgendeine Referenz darauf, die das Schließen verhindert. Und ja, dann funktioniert das Formular auch noch, nur das Schließen nicht. Das Mittel der Wahl ist dann CLEAR ALL. Du kannst den Effekt haben, dass das Debuggen beendet ist oder auch ein CANCEL code beendet und Objekte trotzdem weiter laufen. Oft ist das sogar normal. Wenn ein Formular Load, Init, Show und Activate (LISA) durchlaufen hat, dann läuft kein Code und trotzdem "läuft" das Formular ja. Der Debugger würde in dem Moment (wenn er denn noch liefe) dann auf das READ EVENTS zeigen, es wird dann nur auf Events gewartet, also z.B. Clicks o.ä. Aber in der Situation kannst Du dann ein Formular per Close Button schließen. Wenn das nicht geht dann ist irgendein Murks noch da, der das Schließen verhindert, u.u. durch's debuggen. Mach Dir keinen großen Kopf drum, nimm CLEAR ALL zur Hand und erst wenn das auch nicht greift, ist mal ein IDE Neustart nötig.
Dauert der Neustart für Dich lange? Wird die Task Pane mit VFP mitgestartet? Das verzögert den Start alleine schon, weil gotdotnet.com nicht mehr existiert und fox.wikis.com auf GetRecentChanges nicht mehr reagiert. Nimm mal den Haken raus bei Options->Task Pane Manager "Open the Task Pane Manager, when Foxpro starts". Schon startet VFP schnell und dann ist das sowieso kein großes Problem, selbst wenn es mal sein muss. Für mich ist die Startzeit von SSD aus <1 sek., vielleicht sogar <.5 sek. Was will man mehr?
Tschüß, Olaf.
Olaf Doschke - TMN Systemberatung GmbH
http://www.tmn-systemberatung.de
- Bearbeitet Olaf Doschke Freitag, 5. September 2014 06:39
- Als Antwort markiert Schosch93 Freitag, 5. September 2014 14:03
Freitag, 5. September 2014 06:28
Alle Antworten
-
Hi Schosch,
ich gehe jetzt mal davon aus, dass sich das Fenster ordnungsgemäß schliesst, wenn Du NICHT debuggst.
Innerhalb des Debuggers das Programm zu schliessen bzw. zu stoppen ist zwar ab und an zwingend notwendig, aber....auch mit einigen Nachteilen verbunden die Du anschliessend händig korrigieren musst. In Deinem aktuellen Fall dürfte es sich um eine noch existierende Objektreferenz in der Start-prg handeln. Sobald Du diese Referenz entsorgst sollte sich auch das Fenster schliessen. Auf die schnelle könnte allerdings auch ein CLEAR ALL und ggf. CLOSE ALL ausreichen. Die entsorgen Dir dummerweise aber auch sämtliche Projekte, Variablen, Cursor etc. vom _screen und vom Speicher und machen nur Sinn, wenn Du absolut nichts mehr nachprüfen möchtest.
Gruss / Best regards
-Tom
Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible,
you are, by definition, not smart enough to debug it. 010101100100011001010000011110000101001001101111011000110110101101110011Freitag, 5. September 2014 06:19 -
Führe im Command Window CLEAR ALL aus.
Das Beenden des Debuggers beendet nicht die Runtime, die Runtime läuft überhaupt nicht, wenn Du in der IDE bist, es läuft die VFP9.exe, die IDE selbst. Und die läuft ja noch. Wenn Du in der IDE bist, wird weder die vfp9r.dll noch wird die vfp9rdeu.dll als Resource-Datei herangezogen. Das wären die Dateien, die man Runtime nennt, oder auch die vfp9t.dll. Die werden aber erst von einer von VFP compilierten EXE oder DLL herangezogen. Nebenbei: Es gibt neben den vfp9Rxxx.dll Sprachresource-DLLs noch vfp9xxx.dll Sprachresourcedateien, die von der VFP9.exe herangezogen werden und von MS gibt es dazu nur vfp9enu.dll, deswegen liefert CMONTH() z.B. innerhalb VFP9.exe nur englische Monatsnamen, während der Laufzeit einer EXE aber dann je nach Sprach-Resource DLL, die per Default entsprechend der Windows-Sprache herangezogen wird. Auch per _vfp.startmode kannst Du sehen, wie VFP gestartet ist und erst die Modi ab 2 bedeuten die Runtime läuft. Daneben spricht man noch von design time und run time, wenn der Unterschied für manche Methoden oder Properties wichtig ist, manches ist zur run time readonly, das kann zur Verwirrung beitragen, aber bevor ich abdrifte...
Auch der Toolbar Stop Button beendet nur den aktuellen code, nicht irgendwelche Objekte oder Formulare.
Wenn ein Formular selbst mit seinem Close Button nicht mehr schließt, dann gibt es noch irgendeine Referenz darauf, die das Schließen verhindert. Und ja, dann funktioniert das Formular auch noch, nur das Schließen nicht. Das Mittel der Wahl ist dann CLEAR ALL. Du kannst den Effekt haben, dass das Debuggen beendet ist oder auch ein CANCEL code beendet und Objekte trotzdem weiter laufen. Oft ist das sogar normal. Wenn ein Formular Load, Init, Show und Activate (LISA) durchlaufen hat, dann läuft kein Code und trotzdem "läuft" das Formular ja. Der Debugger würde in dem Moment (wenn er denn noch liefe) dann auf das READ EVENTS zeigen, es wird dann nur auf Events gewartet, also z.B. Clicks o.ä. Aber in der Situation kannst Du dann ein Formular per Close Button schließen. Wenn das nicht geht dann ist irgendein Murks noch da, der das Schließen verhindert, u.u. durch's debuggen. Mach Dir keinen großen Kopf drum, nimm CLEAR ALL zur Hand und erst wenn das auch nicht greift, ist mal ein IDE Neustart nötig.
Dauert der Neustart für Dich lange? Wird die Task Pane mit VFP mitgestartet? Das verzögert den Start alleine schon, weil gotdotnet.com nicht mehr existiert und fox.wikis.com auf GetRecentChanges nicht mehr reagiert. Nimm mal den Haken raus bei Options->Task Pane Manager "Open the Task Pane Manager, when Foxpro starts". Schon startet VFP schnell und dann ist das sowieso kein großes Problem, selbst wenn es mal sein muss. Für mich ist die Startzeit von SSD aus <1 sek., vielleicht sogar <.5 sek. Was will man mehr?
Tschüß, Olaf.
Olaf Doschke - TMN Systemberatung GmbH
http://www.tmn-systemberatung.de
- Bearbeitet Olaf Doschke Freitag, 5. September 2014 06:39
- Als Antwort markiert Schosch93 Freitag, 5. September 2014 14:03
Freitag, 5. September 2014 06:28