Visual Basic Programmering - Introduksjon

Du vil også finne denne teksten her eller på Wikibooks. Jeg anbefaler sterkt å ta en titt på sistnevnte, idet den vil til enhver tid være den mest kurante versjonen.

Dette er programmeringspråket for deg med ingen erfaring fra andre dataspråk. Visual Basic er enkelt, samtidig som det har svært få begrensninger i språket. I det hele er Visual Basic (heretter referert som VB) et kraftig utviklerverktøy som man raskt kan skape komplekse programmer uten noen særlig stor kunnskap i data.

Jeg vil i det hele tatt anbefale alle som har begynt å snuse på muligheten om å lage sine egne programmer med å starte i denne enden, og så senere gå over til andre programmeringspråk som C++ hvis det i hele tatt skulle være nødvendig (og i de tilfellene det er det, kan man bruke begge språkene). Visual Basic var i starten ganske treigt i forhold til andre språk, men har i senere tid forbedret seg kraftig, og man kan idag faktisk lage store ressurskrevende 3D-spill direkte i VB.

I disse forandrende tider har det allerede kommet en ny VB versjon som ikke vil bli dekket i denne guiden. VB.NET, som den kalles, er så fundamental annerledes enn forgjengerene at mye i denne guiden ikke vil kunne fungere skikkelig. Derfor bør du helst ha VB6, eller lavere før du starter.

All kode i denne guiden vil være merket med en grønn farge for at du lettere skal kunne skile alt fra hverandre.


Hva du trenger

For å skrive VB-kode bør man ha en såkalt kompiler. Dette er et program som oversetter VB-koden til maskinkode som dataen kan bruke. Du kan kjøpe ett slikt program, eller laste ned en gratis "demo", VB CCE, her.
Du kan ikke lage EXE-filer VB CCE, men skal du bare teste ut VB er dette heller ikke nødvendig.


VB-programmet

Etter du har åpnet VB-kompileren spretter en dialog boks fram med spørsmål om hva du vil lage. Ikke bry deg om alt det andre, men velg "Standard EXE" og trykk på OK. Helt automatisk vil en form bli laget hvor du kan legge inn hva det skal være. Til venstre ser du en hel del knapper og bokser som indikerer forksjellige controls (ting) du kan legge inn i formen. Trykk f.eks på boksen med A, og trykk så på en vilkårlig plass i formen og dra. Du vil nå ha lagt inn en Label, ett lite vindu hvor du kan skrive inn tekst til bruken.

La oss nå komme igang. Legg inn en CommandButton ved å velge knappen med bildet av en liten boks og legg den inn på et tilfeldig sted i formen. Trykk på denne knappen du nettopp lagde, og du vil bli sendt inn i kode-delen av VB.


Koding med VB

Du vil nå kunne se denne teksten i innskrivnings vinduet:

Private Sub Command1_Click()

End Sub


La oss se nærmere på dette. Private Sub Command1_Click() markerer begynnelsen på hva VB skal gjøre når noen trykker på knappen. Command1 er navnet på knappen og Click er årsaken til at denne delen av koden ble kjørt Private betyr bare at koden er lokal og kan ikke nås fra andre moduler. End Sub markerer slutten på koden.

Men la oss ta litt teori før vi går videre. Det vi så nå var godt kalt en prosedyre. Mesteparten av den koden du skriver vil være i prosedyrer, som egentlig bare er en måte å dele opp koden på. Det finnes forskjellig typer prosedyrer, og Sub er en type. Koden vi nettopp så, kalles også en Event fordi den startes når noe skjer. I dette tilfellet er det når en bruker trykker på en knapp. Ok. La oss skrive inn noe kode.

Imellom Private Sub Command1_Click() og End Sub skriver du:
MsgBox "Hallo verden!"

La så teste dette ved å trykke på F5, eller på play-knappen i verktøylinjen. Formen vi lagte dukker så opp, sammen med den knappen vi la inn. Trykk på knappen og en meldingsboks med teksten Hallo verden kommer opp. Stilig, ikke sant?

Du kan skrive inn hva det skal være istedenfor Hallo verden, men det må
være mellom de to gåseøynene for at det skal virke. Lek deg litt med forskjellige
meldinger før du går videre på neste del.


Tekstbokser

Gå ut av kodedelen og tilbake til formen. Dette gjør du ved å avslutte kode-vindet med X-knappen nedenfor den helt øverst til høyre. Så skal du se etter en knapp på verktøylinjen helt til venstre der du helt tydelig ser en liten boks med skriften ab| i. Trykk på den, og legg den inn slik du gjorde med Command1-knappen. Så må du endre navnet på tekstboksen. Dette gjør du ved å markere teksboksen og så lete etter en verktøyboks kalt "Properties - Text1". Finner du den ikke, må du kanskje framheve den med F4. I denne verktøyboksen skal det være to kolonner med forskjellige verdier i. Det er her alle egenskapene til et objekt befinner seg i. Se etter (Name) i den venstre kolonnen. Når du har funnet den endrer du cellen i den høyre kolonnen fra Text1 til txtTekst. Dette er for å gjøre alt mer oversiktelig og lettere å lese uten å teste koden. Vi trenger ikke skifte navnet på Command1, men for din egen del bør du navngi alt du legger inn, også formen.

Når den er trykt lagt inn i formen går du tilbake til Command1 koden med å trykke på knappen du allerede har i formen. Så bytter du ut MsgBox koden du la inn med dette:

MsgBox txtTekst.Text

Start koden med F5 og skriv noe inn i tekstboksen. Trykk så på knappen og völa, teksten du skrev inn vil befinne seg i meldingsboksen. Så, hva skjedde her? Jo, tekstboksen du kalte for txtTekst kan nås ved å skrive dets navn. Teksten inne i en tekstboks hentes ved å skrive .Text etter navnet. Hvis du ser nærmere på Properties vinduet vil du finne cellen merket med Text. Syntaksen er derfor:

[object].[property]

Prøv nå å legge inn denne koden istedenfor:
txtTekst.Text = "Hallo verden!"

Tekstboksen vil nå inneholde teksten Hallo verden etter du har trykket på knappen. Det du nå har vitnet kalles Property, eller en Egenskap til en kontroll. Dette vil du se mye av i din programmerings karriære, og er derfor lurt å lære seg.


Variabler

Variabler er en vital del av programmeringspråket. De lagrer forskjellig type informasjon slik du kan senere nå dem. Til forksjell fra mange andre språk trenger man ikke deklarere en variabel før man kan bruke den, men det er absolutt å anbefale. For å deklarere en variabel bruker man kommandoen Dim. Vi kan teste dette ved å legge denne koden inn hvor du tidligere har skrevet MsgBox kodene:

Dim Test
Test = "Hallo verden!"
MsgBox Test


Koden gjør ikke noe mer enn det første eksempelet, men viser hvordan man bruker variabler. Videre kan man sette en variabel lik en egenskap i en kontroll. Endre navnet på tekstboksen til txtNavn. Så legger du til en ny teksboks som du kaller txtAlder. Finn fram kodevinduet og lim dette inn istedenfor den andre koden:

Dim TekstUt
TekstUt = "Mitt navn er " & txtNavn.Text
TekstUt = TekstUt & ". Jeg er " & txtAlder.Text & " år gammel"
MsgBox TekstUt


Kjør koden og skriv navnet ditt inn i txtNavn, mens du skriver inn alderen din i txtAlder. Trykk på knappen. Nå vil en meldings boks komme opp hvor navnet og alderen din står. Som du ser gjør variabler det mye enklere å skrive kode. Du la kanskje merke til et for nå ukjent tegn i programmeringen: & .Denne brukes kanskje enkelt for å sette sammen tekst slik som vist i eksempelet.

Du trenger ikke bare bruke tekst i variablene dine. Tall kan også brukes, og naturligvis utregning av mattematiske formler. Se på dette eksempelet.

Dim Tall
Tall = 2 + 2
MsgBox Tall


Dette vil gi 4, noe som vi alle må være enige 2 + 2 er. Alle fire regnearter kan
brukes, og naturligvis også variabler:


Dim Ledd
Dim Ledd2
Dim Sum

Ledd = 12
Ledd2 = 8
Sum = Ledd + Ledd2
MsgBox Ledd & " + " & Ledd2 & " = " & Sum


Vi kan nå f.eks lage et lite regneprogram som multipliserer sammen to tall fra brukeren. Kall den ene teksboksen for txtTall, og den andre for txtTall2.
Legg dette inn i Command1 sub-en:


MsgBox txtTall.Text & " * " & txtTall2.Text & " = " txtTall.Text * txtTall2.Text


Vær oppmerksom på at teksboksene må inneholde tall, ikke bokstaver. Følger man ikke denne regelen får man en feilmelding (Type mismatch) og programmet stanser. Kommer dette fram har man valget å debuge (debug), eller å avslutte programmet og returnere til VB (end).

Når vi skal deklarere flere variabler kan det av og til være nyttig å ha alt på samme linje. Dette kan vi gjøre ved å dele opp variablene med komma slik:


Dim Tall, Sum
Tall = 5
Sum = Tall + 5
MsgBox Sum


Du kan deklarere så mange variabler du vil på samme linje, men ikke overdriv. Lag en ny dim linje når det hele begynner å bli uoversiktelig. Eventuelt deklarer etter kategorier slik at du Dim'er alle tekst variablene først, og så tar tall variablene på en ny linje. Det er helt opp til deg hvordan du vil skrive koden, men det er nyttig å holde alt ryddig å pent. Det kan hindre deg fra å bruke mange timer med debugging.


Funskjoner

Funskjoner er prosedyrer akkuratt som sub-er, men i tillegg returnerer de en variabel. Vi kan først se på funskjonen UCase som gjør all tekst om til STORE bokstaver. Kall den ene tekstboksen for txtTekst og legg inn dette eksempelet:


Dim Tekst
Tekst = UCase(txtTekst.Text)
MsgBox Tekst


Prosedyrer kan inneholde såkalte paramentre. I dette tilfellet har UCase 1 parament. For å forklare dette kan vi se på denne koden:


Form1.Backcolor = RGB(255, 0, 0)


RGB har tre paramentre, alle skilt fra hverandre med komma. Formens bakgrunnsfarge vil i dette tilfellet bli rødt. Dette er fordi den første paramentreren viser til hvor mye rødt det skal være i fargen (i en skala fra 0 til 255). Den andre hviser til hvor mye grønt det skal være i fargen, og den siste forteller hvor mye blått fargen skal inneholde.

Liste over ett par funskjoner i VB:

Disse er langt ifra de eneste i VB, men det er ikke nødvendig å liste opp alle.
Ikke alle paramentre er nødvendig, som dette eksempelet viser:


Dim Tall
Tall = Rnd()
MsgBox Rnd * 100


Når du ser etter i listen skulle Rnd ha en paramenter. Men siden denne er skrevet med ( ), er det ikke nødvendig å skrive denne. Dette kalles for en Optional paramenter.

Men dette i hånden kan du ekspermintere med de forksjellige funskjonene. Bruk den forrige koden og sett i gang.


IF-THEN syntaksen

Nå kommer vi til en viktig del av VB, nemlig betingelses-programmering. Prøv ut dette eksempelet:


If txtTekst.Text = "hallo" Then
MsgBox "Hallo igjen!"
End If


Skriv inn hallo i tekstboksen. Meldingsboksen kommer opp. Skriver du ikke hallo vil heller ikke meldingsboksen bli synlig. Vi kan oversette VB koden til norsk slik:

HVIS txtTekst.Text = "hallo" DA SKAL
MsgBox "Hallo igjen"
SLUTT PÅ HVIS


Man kan også legge til en Else del av IF syntaksen:


If txtTekst.Text = "hallo" Then
MsgBox "Hallo igjen!"
Else
MsgBox "Ikke det? Neivel."
End If


Hvis teksboksen ikke inneholder hallo vil en meldingsboks med teksten Ikke det? Neivel. komme fram. Else kan på norsk oversettes til HVIS IKKE. Hvis du vil ha flere betingelser kan du enten legge inn flere IF'er, eller bruke ELSEIF:


If txtTekst.Text = "hallo" Then
MsgBox "Hallo igjen!"
ElseIf txtTekst.Text = "farvel" Then
MsgBox "Farvel"
Else
MsgBox "Hva sa du?"
End If


Du trenger ikke bruke teksbokser, og du trenger heller ikke sjekke for tekst:


Dim Tall
Tall = 5
If Tall = 5 Then
MsgBox "Tall er lik 5"
Else
MsgBox "Tall er ikke lik 5"
End If



Binariske operatører

For å forklare hva dette er kan vi prøve å løse ett problem. Hvis du vil sjekke for flere ting på en gang med IF, slik at en meldingsboks kommer fram når du skriver inn helt bestemte verdier i teksboksene, ville du helt sikkert gjort slik:


If txtTekst.Text = "hallo" Then
If txtTall2.Text = "verden" Then
MsgBox "Hallo verden!"
End If
End If


Men du kan faktisk også gjøre slik:


If txtTekst.Text = "hallo" AND txtTall2.Text = "verden" Then
MsgBox "Hallo verden!"
End If


Jeg foretrekker den siste på grunn av dens enkelthet og størrelse. Dessuten er den lett å forstå. Men hva hvis du vil at meldingsboksen skal komme fram hvis en eller begge av tekstboksene er en viss verdi. Da kan du f.eks gjøre slik:


If txtTekst.Text = "hallo" OR txtTall2.Text = "verden" Then
MsgBox "Hallo verden!"
End If


Hva er det som foregår? Mer detaljert enn at AND og OR kalles for binariske operatører er det ikke nødvendig å gå, siden du allerede har forstått hvordan de brukes. Deres dynamikk vil jeg si er et tema for viderekomne VB-programmerere. Bare husk på at de kan kombineres og brukes uendelig mange ganger i en syntaks slik at f.eks dette er lovlig:


Dim Tell
Tell = 5
If txtTekst.Text = "hallo" AND txtTall2.Text = "verden" AND Tell = 5 Then
MsgBox "Hallo verden!"
End If



Kontroller

Til nå har vi sett på to kontroller: Teksbokser og knapper. Men fremdeles har vi mange igjen. Jeg vil nå kort prøve å gå igjennom de mest brukte.

Knapper

Fremdeles vet vi ikke hvordan vi skifter teksten på knappen. Hvem vil vel ha en knapp der det står Command1? Dette gjør vi med egenskapen Caption. Gå inn i Properties vinduet, finn egenskapen, og endre cellen ved siden av.

Checkboksen

Du legger den inn ved å markere den 4 boksen fra toppen 1 rad i verktøyboksen med de forskjellige kontrollene. Den ser ut som en teksboks med en V i. Egenskapen Caption er teksten som skal settes inn ved siden av boksen.
Den mer interessange egenskapen er Value som befinner seg nesten helt nederst i Properties vinduet. Den kan ha tre verdier:

0 = Unchecked
1 = Checked
2 = Grayed


Det betyr at når du skal teste om en checkbox er markert må du bruke noe lignende denne koden:


If Check1.Value = 1 Then
MsgBox "Checkboksen er markert!"
End If


Skal du ha betingelser for flere checkbokser bruker du binariske operatører.

Option

Denne kontrollen finner du til høyre for checkboksen i verktøyboksen. Den er i forhold til checkboksen ganske lik, men med to forskjeller: Så for å teste om en option boks er markert gjør du slik:


If Option1.Value = True Then
MsgBox "Optionboksen er markert!"
End If


Label

Er markert i verktøyboksen med en stor A. Teksten endres med Caption
egenskapen.

Combobox

Er en nyttig liten kontroll som brukes ofte i programmeringen. Du finner den rett under checkboksen. For å legge til "Items", eller tekst må du enten bruke List egenskapen eller AddItem prosedyren:


Combo1.List(0) = "Hallo"
Combo1.List(1) = "Hallo verden!"
Combo1.AddItem "Hallo alle sammen!"


Du kan ikke bruke AddItem for å legge til tekst før du har startet programmet, men du må da bruke List egenskapen. Trykk på den i
Properties vinduet og trykk på knappen som dukker opp i høyre kolonne. I teksboksen som dukker opp kan du skrive inn de forskjellige tingene brukeren kan velge mellom.

For å se hva som er valgt kan du bruke Text egenskapen:


If Combo1.Text = "Hallo" Then
MsgBox "Hallo til deg også!"
End if


Normalt sett kan brukeren skrive inn sin egen tekst i combo boksen, men dette er ikke alltid ønskelig. For å gjøre den til "Drop-down only" setter du egenskapen Style til 2.

Du har kanskje lagt merke til at når du starter programmet er combo boksene helt tomme. Brukeren må selv velge et arternativ før de har innhold, og dette kan i mange tilfeller være svært plagsomt. For å løse dette må du bli introdusert med en ny Event kalt Form_Load.

Denne eventen kalles når formen lastes inn. Legg følgende kode inn i formen, men du må legge den utenfor Command1_Click sub-en. Du kan ikke legge en prosedyre direkte inn i en annen prosedyre.


Private Sub Form_Load()
Combo1.ListIndex = 0
End Sub


Merk at comboboksen må inneholde noe, ellers vil programmet ditt bli avsluttet og du sendes tilbake til VB. Når combobokser er tomme har de ListIndex -1, som ikke refererer til noen tekst i Listen. Defor må du sette indeksen til 0, som er det første elementet i comboboksen.

Det er på dette området VB kan virke litt underlig for nybegynnere. Hvorfor begynner VB å telle på 0, når alle andre her i verden begynner på 1? Dette gjelder forsovet også mange andre programmeringspråk, som ikke gjør forvirringen bedre. Det er blant annet fordi matemattikere begynner å telle på null, og derfor er windows basert på dette. VB prøver faktisk også å rette opp på dette med at ved mange teknikker begynner tellingen på 1. Likevel gjør denne blandingen det hele bare værre. Det er grunnen ikke så viktig, så du trenger ikke bry deg om det.

Listboks

Du finner den rett ved siden av comboboksen. Den eneste forskjellen er at du må ikke trykke på noen knapp for å se alle elementene, men de er allerede synlig.
Du forstår nok hva jeg mener når du prøver den ut.


Ja, dette var de aller vanligste kontrollene. Jeg skal gå mye dypere inn i de
andre senere, men først skal vi se på noen egenskaper som du finner på nevnte
kontroller: