Vraag & Antwoord

Programmeren

Unload form = unload alle in form geinitieerde objecten?

Anoniem
DarkScribe
9 antwoorden
  • Hoi,

    Ik heb een form waarin ik een aantal objecten initieer. Zo wordt bijvoorbeeld het object newDing van de class Ding geinitieerd. Als ik het form afsluit word newDing in een public array in mijn Main module gezet. Daarna gebruik ik Unload Me om het form af te sluiten. Ik ging er van uit dat newDing dan dus ook niet meer bestaat.

    Maar als ik het form weer opnieuw open, blijkt newDing al een waarde te hebben… Althans daar lijkt het op. Ik test bij het afsluiten namelijk of er al een Ding in de array zit met dezelfde naam. Ondanks dat ik de naam wel aanpas voordat ik de 2e keer het form afsluit, krijg ik toch de melding dat er al een Ding met die naam bestaat. Verander ik de naam dan weer, krijg ik toch dezelfde foutmelding. Komt dit doordat newDing nog bestaat en dus al een naam heeft, of moet ik het probleem ergens anders zoeken?

    Bedankt,
    El Loco
  • unload me sluiot alles af dat met je form te maken heeft. Als je de gegevens opslaat in een PUBLIC array dat in een module BUITEN je form staat blijft ie dus gegevens bevatten totdat je hem leegmaakt.

    Maak dus bijvoorbeeld de array leeg bij het openen van het form, dan weet je zeker dat je niet tegen het probleem aanloopt.


    Grtz,
  • [quote:ed8fcf1e49="beheer25"]unload me sluiot alles af dat met je form te maken heeft. Als je de gegevens opslaat in een PUBLIC array dat in een module BUITEN je form staat blijft ie dus gegevens bevatten totdat je hem leegmaakt.
    [/quote:ed8fcf1e49]
    Unload sluit niet alles af heb ik in de praktijk gemerkt. De code wordt niet uit het geheugen gehaald (volgens mij staat dit ook ergens in de help). Denk ook aan static variabelen.
  • unload me sluit volgens mij inderdaad niet alles af. Ik denk dat newDing nog steeds in het geheugen staat, en het dierdoor fout gaat. Hoe kan ik er zelf voor zorgen dat newDing uit het geheugen wordt verwijderd?

    De reden waarom ik newDing in een public array opsla, is omdat ik er later nog mee wil kunnen werken, nadat het formulier is afgesloten. Het legen van de array zou dus in mijn geval niet erg handig zijn. Het zou volgens mij ook niet mogen uitmaken, want ik heb nergens in mijn code een commando staan om info uit de array te halen…

    Adios,
    El Loco
  • Plaats de code eens, dan kunnen we eens zien wat er precies gebeurt.

    Heb je het al eens geprobeerd in Debug modus? dan kun je volgen wat er in de variabelen terecht komt.


    Grtz,
  • [quote:e72f0ce29f="elloco"]De reden waarom ik newDing in een public array opsla, is omdat ik er later nog mee wil kunnen werken, nadat het formulier is afgesloten. Het legen van de array zou dus in mijn geval niet erg handig zijn. Het zou volgens mij ook niet mogen uitmaken, want ik heb nergens in mijn code een commando staan om info uit de array te halen…
    [/quote:e72f0ce29f]

    Als je na een unload van een form doet blijft het datasegment vaak gewoon staan totdat jij expliciet aangeeft dat dat weg moet. Gebruik 'Set frmJouwform is nothing' om de boel zelf op te ruimen.

    Als je een array in public module hebt staan zou het niet best zijn als deze verwijderd wordt als je een form sluit die daar gebruik van maakt. M.a.w. dat ding hoort gewoon bewaart te blijven, zo heb je het zelf gebouwd omdat (zoals je zelf aangeeft) dit precies is wat je zou wilt.
    Je wilt immers later nog eens gebruik kunnen maken van die array. Dus wat je probleem precies is, is me niet duidelijk.

    Of heb je soms die public array in je form staan? Dat moet je dus niet doen. Gewoon een nieuwe module maken om public variabelen, constanten, classes etc. in te declaren. Instanties van classes creëren op plaatsen waar je ze nodig hebt en na gebruik weer keurig opruimen.
  • [quote:68afa571f6]Als je een array in public module hebt staan zou het niet best zijn als deze verwijderd wordt als je een form sluit die daar gebruik van maakt. M.a.w. dat ding hoort gewoon bewaart te blijven, zo heb je het zelf gebouwd omdat (zoals je zelf aangeeft) dit precies is wat je zou wilt.
    Je wilt immers later nog eens gebruik kunnen maken van die array. Dus wat je probleem precies is, is me niet duidelijk.[/quote:68afa571f6]Mijn probleem is niet dat de data bewaart blijft in de array, maar dat als ik het form open, newDing de gegevens bevat van de vorige keer. Deze gegevens zet ik er niet zelf in bij het openen van het form, dus die gegevens staan er blijkbaar nog in omdat ze er nooit uit zijn gehaald. Ik dacht dat als ik het form afsluit, de gegevens in newDing ook gewist zouden worden.

    Voordat ik het form afsluit kopieer ik de gegevens in newDing naar de public array in een andere class, dan sluit ik de form af. Als ik de volgende keer het form weer open, bevat newDing blijkbaar nog steeds de gegevens van de vorige keer en dat is niet de bedoeling. Dus wat ik eigenlijk wil weten is: hoe zorg ik er voor dat het form bij het afsluiten alle gegevens wist?

    Ik heb trouwens nu VB .NET 2003 (i.p.v. VB 6.0).

    Adios,
    El Loco
  • Je zou je class aan kunnen passen zodanig dat bij de initialisatie alle gegevens leeg gemaakt worden. Of je kunt je Form Unload gebruiken om dan alle gegevens leeg te maken voordat het Form echt verdwijnt; op die manier weet je zeker dat alles leeg is wanneer je het Form, en dus je instantie van Ding, weer opent.

    Wat ik denk is namelijk dat wanneer je het Form afsluit dat alleen de geheugenadressen worden vrijgegeven en niet dat het gebruikte geheugen op 0 wordt gezet. Zodra je het Form weer start en dus ook je instantie van Ding, dan zullen de oude gegevens er nog staan omdat die niet gewist werden. Het is namelijk zeer aannemelijk dat dezelfde geheugenadressen worden gebruikt.
  • Ja, dat dacht ik ook al. Maar wat is de beste manier om de gegevens leeg te maken? alles gelijk stellen aan "" (newDing = "")?

    El Loco

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.