/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
On Error og Nothing?
Fra : Stefan Kristensen


Dato : 25-04-05 10:16

Hej NG.

I min kode har jeg
On Error GoTo errH
Dim obj as New Whatever
...
Set obj = Nothing
Exit Function
errH:
MsgBox "Oops!"

Men hvis nu der opstår en fejl, bliver obj jo ikke slettet. Eller sørger On
Error for at slette alle objekter?

Mvh
Stefan



 
 
Jens Vestergaard (25-04-2005)
Kommentar
Fra : Jens Vestergaard


Dato : 25-04-05 13:04

I news:426cb483$0$79457$14726298@news.sunsite.dk,
skrev Stefan Kristensen <stefank@asg.com>:
> Hej NG.
>
> I min kode har jeg
> On Error GoTo errH
> Dim obj as New Whatever
> ...
> Set obj = Nothing
> Exit Function
> errH:
> MsgBox "Oops!"
>
> Men hvis nu der opstår en fejl, bliver obj jo ikke slettet. Eller
> sørger On Error for at slette alle objekter?

Variabler, som er lokale til en procedure (Sub eller Function), lever jo kun
så længe, som proceduren kører.

Men generelt hvis du har kode, som *skal* udføres i slutningen af
proceduren, uanset om du får fejl eller ej, kunne du jo gøre noget i retning
af sådan her

....
procClose:
Set obj = Nothing
Exit Function
errH:
MsgBox "Oops!"
Resume procClose


--
mvh
Jens Vestergaard (mailadr i dette indlæg er ikke gyldig!)
Døgnets jernbanenyheder: www.railsoft.dk/medier.asp



Stefan Kristensen (25-04-2005)
Kommentar
Fra : Stefan Kristensen


Dato : 25-04-05 13:38

> Variabler, som er lokale til en procedure (Sub eller Function), lever jo
kun
> så længe, som proceduren kører.

Det mente jeg også. Men hvorfor sætter man så sine objekter til Nothing?
Hvis det er god skik at gøre det, hvorfor så ikke gøre det sin
fejlhåndtering?

Stefan



Jens Vestergaard (25-04-2005)
Kommentar
Fra : Jens Vestergaard


Dato : 25-04-05 13:55

I news:426ce3f0$0$79464$14726298@news.sunsite.dk,
skrev Stefan Kristensen <stefank@asg.com>:
> Det mente jeg også. Men hvorfor sætter man så sine objekter til
> Nothing? Hvis det er god skik at gøre det, hvorfor så ikke gøre det
> sin fejlhåndtering?

Det er jo ikke sikkert, at fejlhåndteringen afslutter proceduren. Der kan jo
f.eks. være en 'Resume Next' , så der stadig er brug for
objekt-referencen - og der kan være objektvariabler med længere levetid end
den specifikke procedure, fejlhåndteringen gælder.

--
mvh
Jens Vestergaard (mailadr i dette indlæg er ikke gyldig!)
Døgnets jernbanenyheder: www.railsoft.dk/medier.asp



Stefan Kristensen (25-04-2005)
Kommentar
Fra : Stefan Kristensen


Dato : 25-04-05 14:09

> > Det mente jeg også. Men hvorfor sætter man så sine objekter til
> > Nothing? Hvis det er god skik at gøre det, hvorfor så ikke gøre det
> > sin fejlhåndtering?
>
> Det er jo ikke sikkert, at fejlhåndteringen afslutter proceduren. Der kan
jo
> f.eks. være en 'Resume Next' , så der stadig er brug for
> objekt-referencen - og der kan være objektvariabler med længere levetid
end
> den specifikke procedure, fejlhåndteringen gælder.

Ok. Tak for forklaringen.

MVh
Stefan



Tomas Christiansen (25-04-2005)
Kommentar
Fra : Tomas Christiansen


Dato : 25-04-05 16:08

Stefan Kristensen skrev:
> Dim obj as New Whatever
> ...
> Set obj = Nothing

Bemærk at når du bruger "New" i forbindelse med Dim (må normalt frarådes),
så betyder det at et objekt automatisk bliver oprettet blot du refererer
til variablen (når variablen er Nothing, altså).

Det klassiske eksempel er:

If obj Is Nothing Then...

Med din Dim vil svaret _altid_ være False!

-------
Tomas

Stefan Kristensen (25-04-2005)
Kommentar
Fra : Stefan Kristensen


Dato : 25-04-05 19:58

> > Dim obj as New Whatever
> > ...
> > Set obj = Nothing
>
> Bemærk at når du bruger "New" i forbindelse med Dim (må normalt frarådes),
> så betyder det at et objekt automatisk bliver oprettet blot du refererer
> til variablen (når variablen er Nothing, altså).
>
> Det klassiske eksempel er:
>
> If obj Is Nothing Then...
>
> Med din Dim vil svaret _altid_ være False!

Hey! Jeg lærte noget i dag også

Mvh
Stefan



Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409075
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste