waar zijn mijn variabelen

Status
Niet open voor verdere reacties.

andreaugust

Gebruiker
Lid geworden
7 jan 2012
Berichten
105
Tot nu toe kon ik variabelen public maken in elke module en deze waren dan zichtbaar en te gebruiken overal in het project.
Nu, plotseling en ik weet niet waarom zijn deze slechts zichtbaar en te gebruiken in de module zelf waar zij gemaakt werden.
Dank voor enig antwoord.
 
Hoe verwacht je dat mensen het probleem in je code kunnen vinden/aangeven zonder dat ze ook maar een regel van je code hebben gezien?
 
De vraag was wel als opgelost gemarkeerd.
Misschien ben ik één van die idioten maar lezen dat de vraag opgelost was is ook niet zo moeilijk :=)
Toch wil ik uitleggen waarom het opgelost is.
Als bv public getal as integer in de module form1.vb geplaatst wordt wordt de variabele nier herkent in de andere modules.
Ik wist het niet, is form1.vb geen module?
In elk geval bedankt voor de interesse.
 
Had inderdaad niet gezien dat deze als opgelost stond gemarkeerd. Maar dat neemt niet weg dat de opmerking voor toekomstige vragen die je eventueel zult plaatsen nog steeds geldt.

Aangaande het probleem dat je beschrijft: heb zelf al een aantal jaren geen VB meer aangeraakt. Maar waarom zou een public variabele in een form niet in andere modules 'herkend' worden? Dat werkt met een form gewoon hetzelfde als met iedere andere klasse die je schrijft. Zonder je code te zien kan ik alleen een gok doen waar het in jouw geval mis gaat. Dus mocht hetgeen ik vermoed niet kloppen zou ik je alsnog willen vragen om even wat relevante code te plaatsen. Maar ik vermoed dat je op de andere plaatsen waar je je form wilt gebruiken gebruik maakt van het verkeerde datatype. Waarschijnlijk gebruik je daar het supertype als type en heb je niet door dat jouw form daar een subtype van is. Voorbeeld:

[Cpp]
Private Form myForm1; // (form is het supertype)
Private MyForm myform2; (subtype)

myForm1.Getal = 2; // error: supertype kent de public variabele getal niet

myform2.Getal = 2; // subtype kent de public variabele getal wel
[/Cpp]

(Niet meer helemaal nuchter, dus kan zijn dat het geen duidelijk verhaal is. Maar zal dat morgen even controleren )
 
Mijn probleem was opgelost maar ik had er gen erg in hoe dit kwam.
De reden is dat form1.vb geen module is maar een class.
Plaats Public getal As Integer in de form1.vb en het wordt nergens anders herkend, plaats het in een module en het wordt overal herkend.
Ik gebruik vb.net regelmatig en intens maar zeer zeer eenzijdig, vandaar mijn onkunde inzake.
 
De beschrijving 'wordt niet herkend' zorgde bij mij voor verwarring (waardoor ik dacht dat deze variabele niet beschikbaar was). Maar wat je eigenlijk gewoon bedoelde was dat de waarde van de variabele van de actieve instantie van je form niet beschikbaar was. Je geeft zelf aan dat dit komt doordat je form een klasse is in plaats van een module. Maar dit is niet geheel waar. Ja, een klasse heeft (gelukkig maar) een beperktere scope dan een module. Maar het is mijns inziens maar de vraag of het wenselijk is zo'n variabele door de gehele applicatie als global beschikbaar te maken. Een oplossing om deze variabele aan je form toe te voegen zou iets als het onderstaande zijn:

[cpp]
Dim f As Form
For Each f In My.Application.OpenForms
If TypeOf f Is Form1 Then
Dim actieveInstantie As Form1
actieveInstantie = CType(f, Form1)
' actieveInstantie.Getal wordt nu wel 'herkend' :p
End If
Next
[/cpp]
 
Laatst bewerkt:
Uw code klopt tegen de grenzen van mijn kennis inzake.
Met wat ik deed stemde mij tevreden maar is waarschijnlijk niet het beste.
Mijn doel is (was) zowel snelheid als gebruiksgemak.
Ik gebruikte verschillende modulen waarin ik dan functies en subs plaatste volgens hun eigenschappen, bv InOut,Berekeningen, BasisInit, Variables enz.
Meestal plaatste ik dan al mijn globale variabelen in de module Variables die dan overal te gebruiken waren.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan