"Unload" Befehl geht nicht

  • VB6

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Pascal.

    "Unload" Befehl geht nicht

    Moinsen,
    hätte noch mal ne Frage. Mein Projekt besteht aus 3 Formularen (frm_main, frm_register und frm_info).
    Ich kann das Programm nicht über "END" komplett beenden, weil sonst das System abstürzt. Aber das ist jetzt nicht wichtig!
    Ich beende das Programm nun so:

    unload frm_register
    unload frm_info
    unload frm_main

    Das Formular "frm_main" ist "visible = false".
    Der oben genannte Code wird ohne Fehler ausgeführt, aber das Programm läuft weiter und ist nicht beendet.
    Wenn allerdings "frm_main.visible = true" gilt, dann beendet sich das Programm ganz normal.
    Ich bin echt am verzweifeln!!!! Helft mir!!! ;(
    Also, es muss auch ohne den Befehl "End" gehen, weil wenn nämlich die Form sichtbar ist, geht das ja auch einwandfrei.
    @Pascal
    Unload me und unload frm_main haben doch den selben Effekt, wenn der Code sich in der Form frm_main befindet.
    Habs jetzt zwar trotzdem mal ausprobiert, geht aber auch nicht, das Proggi bleibt immer noch an!
    Es kann auch daran liegen, dass du nach dem Unload immernoch irgentwo auf die Form zugreifst, sodass die Form wieder geladen wird. Debugg dein Prog mal schritt für schritt und schau nach ob dies der fall ist oder poste mehr Quelltext. Eine weitere Möglichkeit wäre noch, dass du Formulare beim entladen vergessen hast, aber mit dem END-Befehl sollte das Programm definitiv beendet sein.
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau
    Also, ich glaube ich hab da was falsch gemacht! Ich hab nun das so gemacht wie "Malcolm" gesagt hat, aber wenn er nun den Befehl ausführt, ist das Programm sogar zwei mal offen! ?(
    Also, so sieht der Code nun aus:

    Set frm_info = Nothing
    Set frm_register = Nothing
    Set frm_main = Nothing
    Unload frm_register
    Unload frm_info
    Unload Me


    @Agent
    Ich greife nicht mehr auf die Form zu, höchstens ein Timer, der aber einen Intervall von 20000 hat. Da müsste das Programm schon längst beendet sein.
    Hallo.

    Ich habe dein Problem mal nachgebaut, also drei Formulare ins Projekt aufgenommen und eins auf visible = false gesetzt, es funktioniert trotzdem.

    Du hast doch geschrieben, dass alles funktioniert wenn das frm_main-Formular visible = true besitzt? Kannst du das Formular denn nicht kurz vorm Schließen des Programms eben für den Bruchteil einer Sekunde auf visible = true setzen? Das stört doch keinen bzw. fällt kaum auf und schon ist dein Problem gelöst.

    mfG

    Malcolm
    Nun ja, ich glaube mein VB spinnt gerade ein bisschen.
    Es beendet sichnun nichtmal mehr, wenn das Formular sichtbar ist. Na gut, wenn das so anscheinend wirklich nicht geht, will euch mal eben das Problem erklären, warum der Befehl "End" nicht funktioniert, vielleicht liegt da die Lösung des Problems!
    Also, wenn ich den Befehl "End" in der VB6 SP6 Entwicklungsumgebung benutze ist alles in bester Ordnung. Wenn ich nun aber das Proggi zu ner *.exe kompiliere und ausführe, stürzt das Programm ab, mit folgender dieser Fehlermeldung .

    Ich vermute, es liegt an der *ocx Datei "Coolbutton", diediese Programm verwendet, aber mehr kann ich euch leider auch nicht sagen!
    Original von Super Progger
    Set frm_info = Nothing
    Set frm_register = Nothing
    Set frm_main = Nothing
    Unload frm_register
    Unload frm_info
    Unload Me


    So ist es definitv falsch! Mit "set ... = nothing" löscht du die Referenz auf das Form-Objekt. Wenn du dann "Unload ..." machst, enthält z.B. "frm_info" nichts mehr. Ich denke, VB erstellt es dann neu, andere Programmiersprachen würden dann eine Zugriffsverletzung produzieren (was ich an so einer Stelle bevorzugen würde).

    Daher wenn, dann so:

    Visual Basic-Quellcode

    1. Unload frm_register
    2. Set frm_register = Nothing
    3. Unload frm_info
    4. Set frm_info = Nothing
    5. Unload frm_main
    6. Set frm_main = Nothing
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Unload me und unload frm_main haben doch den selben Effekt


    Das war ein Mißverständnis von mir, aufmerksames Lesen hätte mich weiter gebracht. Ich hab mich auf DK1 bezogen, denn dort ist die Rede von End.

    End ist aber die Holzhammermethode, die das Programm beendet ohne Unload-, QueryUnload oder Terminate-Ereignisse auszulösen und von daher stellenweise ungeeignet.

    Zu Deinem Problem: es könnte der Timer sein, ebenso ein Objektverweis der noch nicht freigegeben wurde wie bspw. die CoolBar.