Vraag & Antwoord

Programmeren

[vb6] variabelen out of scope laten gaan

Anoniem
RubeL
5 antwoorden
  • In mijn programma heb ik een form gemaakt waarmee de gebruiker 'objecten' kan selecteren. Dit doe ik als volgt:

    [code:1:493f7c7eaa]Call frmObjectSelect.selectGroepen[/code:1:493f7c7eaa]

    selectGroepen is een functie van frmObjectSelect die een array van strings teruggeeft met daarin groep-id's.
    Zo heb ik ook functies zoals selectUsers die weer een ander soort objecten teruggeeft.

    Op het moment dat de functie wordt geladen, toont deze het formulier en wordt er een sub geladen die een lijst uitvraagt uit de database met het soort objecten waaruit gekozen kan worden.
    Daarna gaat de functie een loop in van DoEvents totdat het form onzichtbaar wordt:

    [code:1:493f7c7eaa]
    Do While frmObjectSelect.Visible = True
    DoEvents
    Loop
    [/code:1:493f7c7eaa]

    Na deze loop geeft de functie een array terug. Deze array is een globale variabele van het form die gevuld wordt op het moment dat de gebruiker op de OK knop drukt.

    Het form doet precies wat het moet doen, dus dat is niet het probleem. Echter, doordat ik het form laad middels de functie, gaan de globale variabelen binnen het form (waaronder dus die array) niet out of scope.

    Het gevolg is, dat als het form een tweede maal wordt opgeroepen en de gebruiker op Cancel drukt, de objecten toch teruggegeven worden omdat de array niet is geschoond.

    Ik heb geprobeerd om het Erase statement te gebruiken bij de Unload van het form, maar in dat geval worden enkel de items van de array op Empty gezet.

    Hopelijk heeft iemand een goed idee voor mij.

    Ruben
  • [quote:c927fed12e="RubeL"]In mijn programma heb ik een form gemaakt waarmee de gebruiker 'objecten' kan selecteren. Dit doe ik als volgt:

    [code:1:c927fed12e]Call frmObjectSelect.selectGroepen[/code:1:c927fed12e]

    selectGroepen is een functie van frmObjectSelect die een array van strings teruggeeft met daarin groep-id's.
    Zo heb ik ook functies zoals selectUsers die weer een ander soort objecten teruggeeft.

    Op het moment dat de functie wordt geladen, toont deze het formulier en wordt er een sub geladen die een lijst uitvraagt uit de database met het soort objecten waaruit gekozen kan worden.
    Daarna gaat de functie een loop in van DoEvents totdat het form onzichtbaar wordt:

    [code:1:c927fed12e]
    Do While frmObjectSelect.Visible = True
    DoEvents
    Loop
    [/code:1:c927fed12e]
    [/quote:c927fed12e]
    Dit zou ik toch anders oplossen….
    Kun je frmObjectSelect niet modaal laten zien?[code:1:c927fed12e]call frmObjectSelect.Show(vbModal)[/code:1:c927fed12e]

    Form unloaden doe je zo:[code:1:c927fed12e]Call Unload(frmObjectSelect)
    Set frmObjectSelect = Nothing[/code:1:c927fed12e]
  • De functie selectGroepen die het form ook toont, roept het form al modal aan. Dit was in mijn code echter niet te zien.

    De functies selectGroepen, selectUsers e.d. heb ik nodig om het juiste soort objecten te tonen in de lijst (het is een 'multi-purpose'-form).

    [code:1:9bb5b51369]Set frmObjectSelect = Nothing[/code:1:9bb5b51369]
    heb ik al geprobeerd, maar tot mijn verbazing bleef de array toch bestaan; zij het dan met lege elementen (Empty).

    Laat ik anders eens wat anders proberen:
    Hoe roep ik het form op, toon ik de lijst en geef ik de geselecteerde items terug in een array aan het programma-onderdeel dat het aanroept zonder een functie te gebruiken zoals ik dat dus nu deed?
  • Een Erase van de array werkt wel.
    De array die de functie retourneert, wordt ge-Join-ed tbv een SQL-statement. Join ziet dat de array geen elementen bevat en retourneert een lege string.

    Mijn probleem is dus simpel op te lossen met:

    [code:1:63b44394b6]
    dim myGroepen() As String

    On Error GoTo foutarray
    myGroepen() = frmObjectSelect.selectGroepen

    'Dit statement 'klapt' als een lege array is teruggegeven
    If not UBound(myGroepen) = -1 then
    'vervolgcode
    End If

    foutarray:
    [/code:1:63b44394b6]

    Dit stukje werk is niet bepaald mijn grote trots op het gebied van programmeren, maar voor nu werkt het wel.
  • [quote:62b9692702="RubeL"]Een Erase van de array werkt wel.
    De array die de functie retourneert, wordt ge-Join-ed tbv een SQL-statement. Join ziet dat de array geen elementen bevat en retourneert een lege string.

    Mijn probleem is dus simpel op te lossen met:

    [code:1:62b9692702]
    dim myGroepen() As String

    On Error GoTo foutarray
    myGroepen() = frmObjectSelect.selectGroepen

    'Dit statement 'klapt' als een lege array is teruggegeven
    If not UBound(myGroepen) = -1 then
    'vervolgcode
    End If

    foutarray:
    [/code:1:62b9692702]

    Dit stukje werk is niet bepaald mijn grote trots op het gebied van programmeren, maar voor nu werkt het wel.[/quote:62b9692702]
    Wellicht kun je wat met de Split() functie?

Beantwoord deze vraag

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

Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord