Avatar billede adagio Nybegynder
26. februar 2003 - 18:49 Der er 13 kommentarer og
1 løsning

variabel bliver resat?

Jeg har i mit program en variabel (ItemIndex), som bliver sat til i formen "Main":

Option Explicit
Public ItemIndex As Integer

Når jeg trykker på listview, bliver den sat til et tal:

ItemIndex = LstViewMovieList.SelectedItem.Tag

(Jeg kører koden: MsgBox ItemIndex lige efter, for at være sikker på at tallet er rigtigt, og det er det...)

Men når jeg kommer til næste (0g sidste) kode med ItemIndex, så er ItemIndex pludselig blevet sat til '0':

RS.Seek "=", Main.LstViewMovieList.ListItems.Item(ItemIndex).Tag

(RS er RecordSet fra database)


Jeg har søgt mit program igennem, for at være sikker på at jeg ikke har skrevet ItemIndex andre steder, men det har jeg ikke...

Hvad er grunden til at den bliver sat til '0', når den kommer til sidste kode?
Avatar billede martin_moth Mester
26. februar 2003 - 19:04 #1
ItemIndex kan kun ændres i de linier hvor den står på venstre side af et lighedstegn
Avatar billede joern Nybegynder
26. februar 2003 - 19:14 #2
Hej.

Såvidt jeg forstår har dit projekt mere end én form.  Skal samme variabel anvendes med indhold i flere forme, skal den dimensioneres i et modul som Global.

M.v.h.  Jørn
Avatar billede martin_moth Mester
26. februar 2003 - 19:32 #3
Nå ja ;o)
Hvis du kalder en variabel med navn "ItemIndex" fra en anden form end der hvor den er erklæret, vil du bare oprette en ny variabel med samme navn, der naturligvis indeholder ingenting.

Et par tips:

1)
KRÆV ALTID VARIABELERKLÆRING! Jeg fatter ikke hvorfor man overhovedet kan slå den funktion fra i VB6, men du slår den til under Tools, Options, "Require Variable declaration". Gør det! Jeg har mange(!) gange set at folk har problemer fordi de har stavet en variabel forkert, eller har erklæret den som private, og ikke forstår hvorfor den ikke indeholder det de forventer. Det sker ikke hvis du kræver variabelerklæring, da VB vil brokke sig over at den ikke kender variablen. Lækkert!

2)
Du kan læse om hvor variabler er synlige (deres scope) på nedenstående link. Du kan erklære dem som public i et modul, som joern rigtigt siger, så er de synlige overalt. Men det er faktisk nok blot at erklære dem som public på en form, fx. Form1, hvorefter de kan kalden fra andre forme med Form1.variabelnavn = værdi osv.

Understanding scopes of variables:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon98/html/vbconunderstandingscopeofvariables.asp
Avatar billede martin_moth Mester
26. februar 2003 - 19:35 #4
PS:
Tip nr 3 :o)
En bedre måde at søge efter fejl på, i stedet for at bruge msgbox: Sæt et watch på variablen - så kan du se hvor og hvornår den ændres :o)
Debug, Add watch :o)
Avatar billede adagio Nybegynder
26. februar 2003 - 20:09 #5
Ahh... selvfølgelig... glemte at sætte main. foran ItemIndex :o)
Tænkte nok det var en eller anden lille fejl, kunne bare ikke finde den...

Jeg giver pointene til Joern da det var det svar, som kom nærmest hvad jeg skulle bruge (Jeg ønsker ikke at gøre variablen global, da det kun er to forme som bruger den)...

PS: Det med variabelerklæring kendte jeg ikke til, og har ikke selv slået den fra... men nu har jeg sat den til :o)

Takker for svarene
Avatar billede joern Nybegynder
26. februar 2003 - 20:12 #6
Hej Martin>>

Det med at man kan undlade at erklære variable, var netop hvad der i sin tid adskilte Basic og Pascal.  Såvidt jeg kan se i VB5, som jeg bruger, er det standard at det ikke er påkrævet at erklære variable.  Så kan en var. altså have gyldighed indenfor én subrutine.  Det må Bill G jo have ment er attraktivt.

Jeg har ikke tidligere pillet ved det, men nu slået det til.

I øvrigt erklærer jeg stort set altid variable globalt.  At have samme variabelnavn med forskellig anvendelse i flere forme ville forvirre mig totalt.

m.v.h.  Jørn
Avatar billede joern Nybegynder
26. februar 2003 - 20:14 #7
Hej adg>>

Har du så ikke givet pointene til den forkerte?  ... Nå pyt, Martin har så mange.

m.v.h.  Jørn
Avatar billede adagio Nybegynder
26. februar 2003 - 20:15 #8
Jeg kan godt se at samme variabelnavn i forskellige anvendelse kan forvirre en, men jeg erklærer den ikke global, da jeg vil ikke risikere at jeg kommer til at sætte variablen til noget andet i en "forkert" form... (Jeg er ikke så vandt til at programmere)
Avatar billede adagio Nybegynder
26. februar 2003 - 20:17 #9
Joern >> Det var dit svar, som fik mig til at tænke på hvad jeg gjorde forkert, da det var noget af det samme... Og da du kom først, så tænkte jeg at det ville være rigtigt at du skulle have pointene...

Ellers må i lige "slås" om hvem der skal have dem ;o)
Avatar billede martin_moth Mester
26. februar 2003 - 20:24 #10
joern: Skal vi gå uden for og ordne det ;o)

Det var jo dig der fandt fejlen - at varieblen blev brugt udenfor sit scope. Jeg kom bare mes en masse gode råd, synes jeg da selv :o)
Jeg vill dog godt have hart et enkelt point eller to for at bruge min tid på at forklare en masse ting for adq, men skidt, jeg har jo så mange, som du siger...
Avatar billede adagio Nybegynder
26. februar 2003 - 20:29 #11
Sorry, glemte at man kunne dele pointene...

Syntes faktisk også du skulle have nogle point for tippene, men som sagt, så glemte jeg det med delingen :(

Vis du vil have nogle point, så kan Joern lige åbne et spørgsmål, så du lige kan få nogle point for dine gode tips...
Avatar billede martin_moth Mester
26. februar 2003 - 20:33 #12
Det går nok :o)
Avatar billede joern Nybegynder
26. februar 2003 - 20:48 #13
Hej.

Næste gang jeg spørger, vil Martin sikkert kunne svare.  Jeg lægger 15 oveni til den tid  :-)

m.v.h.  Jørn
Avatar billede martin_moth Mester
26. februar 2003 - 20:58 #14
Jeg tror vist ikke du har nogle spørgsmål som jeg kan svare på. Over & Out, og godnat
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester