Ga naar inhoud

Unload form = unload alle in form geinitieerde objecten?


Aanbevolen berichten

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
Link naar reactie
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,
Link naar reactie
[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.
Link naar reactie
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
Link naar reactie
[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.
Link naar reactie
[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
Link naar reactie
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.
Link naar reactie
Tja, dat is inderdaad een klein probleempje, de standaard methode om een object te vernietigen is "Set newDing = Nothing" maar je hebt de kans dat bovenstaand probleem zich alsnog voordoet. Maar je kunt het proberen. Als je het probleem alsnog houdt dan zou je alle variabelen in je object stuk voor stuk leeg moeten maken. Dat is wel een lelijke methode overigens. Maar ik zit te denken, hoe declareer jij je object in dat Form? Doe je een simpele "Set newDing as Ding" en gebruik je hem dan of gebruik je ook het woord "New"? Als je echt een nieuwe instantie aanmaakt van je object dan zou VB eigenlijk niet het oude geheugenadres moeten gebruiken.
Link naar reactie

Om een reactie te plaatsen, moet je eerst inloggen

Gast
Reageer op dit topic

×   Geplakt als verrijkte tekst.   Herstel opmaak

  Er zijn maximaal 75 emoji toegestaan.

×   Je link werd automatisch ingevoegd.   Tonen als normale link

×   Je vorige inhoud werd hersteld.   Leeg de tekstverwerker

×   Je kunt afbeeldingen niet direct plakken. Upload of voeg afbeeldingen vanaf een URL in

  • Populaire leden

    Er is nog niemand die deze week reputatie heeft ontvangen.

  • Leden

    Geen leden om te tonen

×
×
  • Nieuwe aanmaken...