VisualBasic Course Dutch

Embed Size (px)

DESCRIPTION

Visual Basic Course in Dutch

Citation preview

  • Visual Basic door ir. C.Daniels 1

  • Visual Basic door ir. C.Daniels 2

    I. Lab 1 - Inleiding en kennismaking met VB

    A. Waarom Visual Basic? Visual Basic is een grafische programmeeromgeving, waarmee u makkelijk windows-programmas kunt schrijven. Dit is niet vanzelfsprekend. Programmeren in windows is zelfs voor gehaaide programmeurs een hele klus, en zeer ingewikkeld. Visual Basic verlicht deze taak, door de specifieke windows-programmering op zich te nemen, en de gebruiker alleen maar de voor hem interessante programma-onderdelen te laten schrijven. Het ontwerpen (programmeren) en openen van een venster vergt heel wat kennis van de programmeur over windows. Ook het onderscheppen en behandelen van de windows-berichten is een hele klus. Temeer omdat windows een multitasking omgeving omvat, dwz dat windows meerdere programmas tegelijkertijd kan laten draaien. De programmeur dient zich dan ook te houden aan de vooropgestelde spelregels. Maar zoals gezegd, visual basic ontlast de programmeur, en heel de nodige programmeerbackground wordt voor de gebruiker geregeld, als het ware achter de schermen, ze is er wel, maar u ziet ze niet, en hoeft u er ook niet om te bekommeren. Dat is een van de grote voordelen om eenvoudige windows-programmas te schrijven in Visual Basic. Daarnaast kan deze taal ook gebruikt worden in programmas zoals Word en Excel om de kracht van deze programmas te vergroten door het schrijven van u eigen macro-programmas. Dit wordt dan Visual Basic for Applications genoemd, dikwijls afgekort tot VBA.

    B. Hoe werkt windows? De windows-omgeving is event driven, zoals dit in vaktaal wordt genoemd. Vrij vertaald: gestuurd door gebeurtenissen. Wat betekent dit? Dit betekent dat windows reageert op elke actie van een gebruiker. Acties kunnen zijn het klikken op een venster, op een knop, het invullen van tekst in een invoervak, het aanslaan van een toets, het vergroten of verkleinen van een venster, enz. Voor elke actie is er een geschikt programma-onderdeel nodig, dan de goede acties uitvoert. Het is windows zelf die deze events of berichten detecteert en verder stuurt aan de draaiende programmas. In Visual Basic moet de gebruiker alleen programmatuur schrijven voor de gebeurtenissen (events) die hem aanbelangen. Ander gebeurtenissen zoals het klikken op het kruisje rechts boven in een venster, zijn al automatisch voorgeprogrammeerd. Daar hoeft de gebruiker zich niet om te bekommeren.

  • Visual Basic door ir. C.Daniels 3

    In bovenstaand voorbeeld ziet u een eenvoudig programma met twee drukknoppen. Als de gebruiker op Knop1 klikt wordt door windows het bijbehorende programma-onderdeel private sub Knop1_Click aangeroepen. Voor het klikken op Knop2 geldt hetzelfde maar nu wordt het programma-onderdeel private Sub Knop2_Click aangeroepen.

    C. De programmeeromgeving van Visual Basic: ons eerste programma. Maak eerst een nieuwe map aan op de harde schijf of op uw diskette met de naam Mijnprogrammas bv. of kies zelf een toepasselijke naam. Als uw programma Visual Basic opstart krijgt u ongeveer het volgende te zien:

    Knop 1

    Knop2

    Private Sub Knop1_Click . end

    Programma x X

    Private Sub Knop2_Click . end

    Windows is: - Multitasking - Event driven

    Onthou !

  • Visual Basic door ir. C.Daniels 4

    De opdrachten door u uit te voeren, worden in cursieve tekst aangeduid zoals hieronder: Opdracht: doe nu..

    Bij het openen van VB krijgt u het dialoogscherm New project. U heeft verschillende mogelijkheden. In het opstartscherm vraagt VB of u een nieuw of een bestaand programma wil openen. Kies voor het tabblad New, want we gaan een nieuw programma ontwerpen. Laat

    de optie Standard.exe geselecteerd. Dit is namelijk een gewoon VB-programma. Andere opties komen later ter sprake.

    Klik op Openen Daarna krijgt u ongeveer het volgende te zien:

    Als u niet alle vensters ziet zoals hierboven, kunt u dit aanpassen door in het menu -> View het juiste venster aan te klikken. U kunt de vensters ook apart vergroten, verkleinen of verslepen met de muis. Probeer dit uit totdat u ongeveer de layout bekomt zoals hierboven.

    2.Project Explorer venster

    3.Properties dialoog

    4.Form layout

    1.Form window: het venster met het programma dat je gaat ontwerpen

  • Visual Basic door ir. C.Daniels 5

    Hier wat uitleg bij de verschillende vensters. Later zullen we leren ze te gebruiken.

    1. Form window: in dit venster gaat u de layout van uw programma bepalen. U kunt er knopjes plaatsen, invulvelden en allerlei andere objecten nodig voor uw programma. Een groter programma kan meerdere formulieren (vensters) bevatten.

    2. Het venster van de Project Explorer. Deze geeft de documenten aan die bij ons project behoren. Nu zijn dit voorlopig:

    - Het project zelf: dit heet voorlopig Project1 - Een formulier met naam Form1.

    3. Het properties venster. Hier vindt u de eigenschappen van het aangeklikte object.

    Wij hebben er slechts n: het formulier Form1. Een object is aangeklikt of geselecteerd als u er omheen de zwarte blokjes ziet.

    4. Form layout. Hiermee kunt u de plaats op uw scherm bepalen, waar uw programma opstart. U kunt uw programma verschuiven op uw monitor door er met de muis op te klikken en te verschuiven.

    U gelooft het of niet, maar we hebben al een werkend programma gemaakt! Om dit programma te laten draaien klikt u

    op o Menu->Run -> Start o of gebruik F5

    o of klik op:

    Als u dit doet zult u het programma opstarten. Het is slechts een leeg venster zoals je hierboven ziet, maar je kan het venster vergroten, verkleinen, minimaliseren, en zelfs afsluiten door op het kruisje rechts boven te klikken. Dus het heeft alle eigenschappen van een windows-programma! Sluit uw eerste programma af door op het kruisje rechts boven van uw programma

    te klikken of gebruik de knopjes uit de toolbar:

    Afbreken Ctrl-Break Sluiten

  • Visual Basic door ir. C.Daniels 6

    D. De eigenschappen van een object veranderen We hebben nog maar n object: ons formulier. Laten we proberen enkele eigenschappen hiervan aan te passen. Zorg dat dit formulier aangeklikt is. En concentreer u op het venster Properties. Pas de volgende eigenschappen aan: Name: Verander dit in Formulier1 (geen spaties!). De naam hebben we nodig in

    het programma dat we gaan schrijven.

    BackColor: klik op deze eigenschap en daarna op het pijltje rechts. Kies palette en

    selecteer een mooie achtergrondkleur voor uw programmavenster.

    Borderstyle: fixed. We kunnen het venster nu niet meer groter of kleiner maken.

    Caption: verander dit in Eerste Programma. De caption is de titel van uw venster en wordt getoond in de blauwe balk van uw formulier.

    Moveable: verander dit in False. U kunt het venster nu niet meer verplaatsen over uw monitor.

    Start het programma op, en bekijk het resultaat.

    Merk op dat u onderaan in het Properties-venster wat uitleg krijgt over de aangeklikte eigenschap!

    Belangrijk: in een naam van een object mag je geen spaties zetten! Dit zal later ook gelden voor namen van variabelen als we gaan programmeren!

    Onthou !

  • Visual Basic door ir. C.Daniels 7

    E. Reageren op een event Laten we een drukknop plaatsen in ons ontwerp. Als we op de drukknop klikken moet ons programma afsluiten. Om de knop op ons formulier te plaatsen, hebben we het Toolbox venster nodig.

    Als dit venster niet zichtbaar is, kunt u dit nog doen door in het menu te kiezen View --> Toolbox. Klik de drukknop naar uw formulier, en sleep op uw formulier een drukknop. Zorg

    ervoor dat u de grootte aanpast aan uw behoefte.

    Zorg dat de knop aangeklikt is en verander enkele eigenschappen als volgt, in het properties venster:

    Name: cmdSluiten, de naam die we voor de knop gebruiken in het

    programma. Deze laten we beginnen met de letters cmd zodat we weten dat deze variabele een knop aanduidt.

    Caption: verander dit in Sluiten. Dit is het opschrift wat u op de knop kunt lezen.

    Tekstveld (label)

    Invulveld (text)

    Drukknop (command)

  • Visual Basic door ir. C.Daniels 8

    Uw ontwerp moet er nu ongeveer als volgt uitzien:

    Als we nu ons programma zouden laten draaien, kunnen we wel klikken op de knop (proberen!), maar er zal niets gebeuren. We moeten een klein stukje programma schrijven dat reageert op het klikken. We doen dit als volgt:

    Ofwel: Dubbelklik op de knop in de ontwerpfase. Of selecteer het programmeervenster door in het Project-venster

    formulier1 aan te klikken, en op het icoon View code te klikken. Selecteer linksboven de knop cmdSluiten, kies rechtsboven het event Click. Dit is wat ingewikkelder maar geeft meer mogelijkheden.

    Verander het subprogramma als volgt:

    Private Sub cmdSluiten_Click() End End Het commando End zorgt ervoor dat uw programma sluit als u op de knop klikt. Dit programmavenster moet er nu als volgt uitzien:

  • Visual Basic door ir. C.Daniels 9

    Nu moet de drukknop werken! Laat het programma runnen, en kijk of het programma sluit als we op de knop klikken.

    F. Een popup-scherm Een popup-scherm is een venster dat opengaat om een mededeling, waarschuwing aan de gebruiker te melden. Plaats een nieuwe knop op uw formulier, en verander de eigenschappen als volgt:

    Name: cmdKlik Caption: Klik hier!

    Dubbelklik op de knop om het programma aan te vullen als volgt (alleen het vetgedrukte moet u zelf aanvullen:

    Option Explicit Private Sub cmdKlik_Click() Dim intAntwoord As Integer intAntwoord = MsgBox("Hier komt je mededeling!", 0, "Hi!") End Sub Private Sub cmdSluiten_Click() End End Sub

    Als u het programma laat runnen, krijgt u volgend resultaat als u de knop Klik hier aanklikt:

    Zon scherm is zeer nuttig, als u een mededeling wilt geven aan de gebruiker van het programma, als deze bijvoorbeeld een foutieve ingave doet.

  • Visual Basic door ir. C.Daniels 10

    U kan de waarde van de variabele intAntwoord zichtbaar maken door de volgende

    lijn in uw programma bij te voegen:

    Private Sub cmdKlik_Click() Dim intAntwoord As Integer intAntwoord = MsgBox("Hier komt je mededeling!", 0, "Hi!") Debug.Print intAntwoord End Sub

    De waarde van intAntwoord worden dan zichtbaar in het Immediate Window. Als dit niet zichtbaar is, kies dan in het menu View->Imediate window. In plaats van een getal kunt u ook een zogenaamde constante gebruiken. Dit is een naam die hetzelfde effect heeft, en makkelijker te onthouden is. Probeer eens de volgende waarden van getal uit, en noteer het resultaat van intAntwoord als u op een knop klikt: (eerste lijn is reeds ingevuld) Getal Constante Resultaat (nieuwe knoppen,

    speciale tekens) Waarde van de

    variabele 1 vbOkCancel Knoppen Ok

    Annuleren 1 2

    2

    3

    4

    8

    16

    32

    64

    Het commando Msgbox ziet er als volgt uit: Variabele = MsgBox( De tekst die je wil tonen, getal, De paginatitel ) Variabele: hierin wordt een geheel getal geplaatst naargelang je reactie op het popupscherm. Zie verder voor uitleg over variabele. Getal: met dit getal kun je extra knoppen of symbolen bijvoegen in je popupscherm. Naargelang de reactie op dit popupscherm, verandert de waarde van de variabele.

    Onthou !

  • Visual Basic door ir. C.Daniels 11

    U kunt deze opties ook combineren. Als u optie 1 en 64 samen wil vult u 65 (= 64 + 1) in! Probeer uit!

    G. Wat is een variabele? In elk programma heeft u wel behoefte om enkele gegevens (getallen, tekst,..) te bewaren. Hiervoor moet u geheugenruimte reserveren in het RAM-geheugen van uw pc. Dit geheugen is vluchtig: als u de pc afzet zijn alle gegevens uit dit geheugen verdwenen. Vandaar dat elke pc ook een harde schijf heeft, waar u op magnetische weg, langdurig, gegevens kunt opslaan. Het RAM-geheugen kunt u beschouwen als een enorme kast met schuifjes. Alle schuifjes worden genummerd van 0 tot Zo heeft een geheugen van 16Mb (megabyte) ongeveer 16.000.000 (juister: 224) vakjes. In elk vakje past n byte, ofwel 8 bitjes. In n geheugenvakje kunt u dus n byte bewaren. Als u deze byte terug wilt zoeken, heeft u natuurlijk de nummer van het juiste vakje nodig. Dit zou erg omslachtig zijn. In de begintijd van de computers gebeurde dit wl op deze manier! Maar nu wordt aan een geheugenvakje een naam gegeven. Dit is makkelijker te programmeren. En de computer kan nu dat vakje in zijn geheugen zetten, waar hij wil. Het juiste nummer van de plaats hoeft u niet te weten, alleen de computer weet dit. Zon geheugenplaatsje is een variabele. Eigenlijk duidt deze naam dus aan over welk vakje u wilt beschikken in uw programma. Zo is intAntwoord een plaatsje waar uw een geheel getal (integer) kan instoppen. Om zon vakje te reserveren in uw programma heeft uw dan de volgende instructie nodig:

    Dim intAntwoord As Integer Men noemt dit een variabele declareren. Dim staat voor dimension, engels voor dimensioneren. As Integer wil zeggen dat we een vakje willen waar een geheel getal in kan. In dit geval heeft u twee bytes (twee vakjes) nodig om dat geheel getal op te slaan. We zullen later kennismaken met andere types van variabelen. U mag ook meerdere vakjes in nmaal declareren zoals hieronder

    Dim i,j,k as Integer

  • Visual Basic door ir. C.Daniels 12

    Hier declareert men 3 vakjes om een geheel getal te bewaren met de namen i, j en k. Het is een goede gewoonte (maar niet verplicht) om in de naam van de variabele aan te geven over welk type van variabele het gaat. Vandaar dat we de variabele in ons programma de naam intAntwoord hebben gegeven. We weten onmiddellijk dat het hier over een geheel getal gaat. Variabelnamen zoals a,b,c, gebruikt u beter niet. Het is niet duidelijk wat ze betekenen. Soms worden toch de variabelnamen i, j, k gebruikt om tellers aan te duiden die we maar even nodig hebben.

    1. Option Explicit Bovenaan uw programma ziet u de woorden Option Explicit staan. Deze instructie zorgt ervoor dat u verplicht zijt al de gebruikte variabelen te declareren. Het gebruik van deze optie is niet verplicht. Toch raden we ten zeerste aan deze optie te gebruiken. Het vermijdt dat uw fouten maakt in de naam van uw variabele. Een typefout in een naam van een variabele wordt door de compiler onmiddellijk ontdekt, en vermeld dat hij een onbekende variabele gevonden heeft. Bij uitvoering geeft de compiler deze foutmelding hiernaast.In uw programma wordt tegelijkertijd de regel aangeduid waarin zich de fout bevindt!

    De Option Explicit komt automatisch in uw programma te staan. Als dit niet gebeurt, kunt u dit aanpassen door in het menu Tools -> Options -> Editor de optie Require variable declaration aan te klikken.

    Variabele: - Een variabele is geheugenvakje om gegevens op te slaan in het RAM-geheugen van de

    computer. We geven zon vakje een naam, om het te kunnen gebruiken in een programma.

    - Een geheugenvakje om gehele getallen op te slaan wordt een integer genoemd, en hiervoor zijn 2 bytes nodig in het RAM-geheugen.

    - Het is een goede gewoonte om in de naam van de variabele aan te geven over welk type het gaat. Zo gebruikt men int als voorvoegsel om een variabele voor een geheel getal aan te geven, bv. intAntwoord

    - Geef altijd een naam die een betekenis heeft, dus niet a, b en c. Maar een naam zoals intAntwoord. Alleen voor tellertjes die maar even nodig zijn, worden nogal eens de waarden i, j, k gebruikt.

    Onthou !

  • Visual Basic door ir. C.Daniels 13

    Zoek deze instelling op in het programma, en verander indien nodig!

    Sla uw oefening op! Menu->file->save Kies echter andere, meer betekenisvolle namen voor het project en het formulier, bv Oef1(de extensie vbp, of frm niet invullen!)

    2. Datatypes VB kent verschillende soorten datatypes. Hieronder staat een lijst met de verschillende mogelijkheden.

    Datatype Uitleg Bereik Nodige geheugen ruimte in

    bytes Integer Bevat gehele getallen.

    Een declaratie met percent teken (%) achteraan stelt een Integer datatype voor.

    -32,768 tot 32,767. 2

    Long Bevat gehele getallen. Een declaratie met ampersand teken (&) achteraan stelt een Long datatype voor.

    -2,147,483,648 tot 2,147,483,647

    4

    String Kan een reeks karakters bevatten. Dat kunnen letters, cijfers, spaties of leestekens zijn. Een declaratie met Dollar-teken ($) achteraan stelt een String datatype voor.

    Vaste lengte: 0 tot 63K karakters Variabele lengte:

    0 tot ong. 2 miljard karakters

    Boolean Kan slechts 2 waarden bevatten: True (-1) of False (0)

    2

    Byte Voor kleine gehele getallen. 0 255 1

    Single Bevat decimale getallen in enkele precisie. Een declaratie met uitroepteken (!) achteraan stelt een Single datatype voor.

    Positieve getallen: 1.401298E-45 to

    3.402823E38 Negatieve getallen:

    -3.402823E38 tot -1.401298E-45

    4

    Double Bevat decimale getallen in dubbele precisie. Een declaratie met spoorwegteken (#) achteraan stelt een Double datatype voor.

    Positieve getallen: 4.94065645841247E-324 tot

    1.79769313486232E308 Negatieve getallen:

    -1.79769313486232E308 to -4.94065645841247E-324

    8

    Date Voor datum- en tijdwaarden. Worden opgeslagen als decimale getallen. Het gedeelte voor de komma stelt de datum voor, het gedeelte achter

    8

  • Visual Basic door ir. C.Daniels 14

    de komma de tijd.

    Currency Bevat getallen, speciaal voor berekeningen met munteenheden. Een declaratie met het teken (@) achteraan stelt een Currency datatype voor.

    -922,337,203,685,477.5808 tot

    922,337,203,685,477.5807

    Variant Kan alle soorten data bevatten. Ook speciale warden zoals Empty (leeg) en Null. Als variabelen niet expliciet gedeclareerd worden zijn het automatisch variabelen van het varianttype.

    3. Declareren van variabelen Variabelen declareren betekent eigenlijk geheugenruimte reserveren voor die variabele. Variabelen kunt u declareren op twee manieren:

    - Door het aangeven van het type: Dim B as Integer

    - Of door het achtervoegen van een speciaal teken (verouderd) Dim B% Beide declaraties stellen een integer-variabele voor. Wij zullen in de cursus altijd de eerste methode aanhouden. U kiest beter voor duidelijke variabelnamen, die aangeven welk gegeven u erin gaat opslaan. Dus niet A,B of c1, maar wel bijvoorbeeld strIngegevenTekst. Dit geeft iets meer typewerk bij het ontwerpen, maar vergemakkelijkt in hoge mate de leesbaarheid en duidelijkheid van het programma. Alleen voor tellertjes in lusinstructies, worden nogal eens de variabelen i,j,k gebruikt. In de oefeningen zullen we deze verschillende datatypes leren gebruiken.

    H. Oefeningen

    1)

    2) Oefening 1 Schrijf een nieuw programma. Pas de grootte en de kleuren van het formulier aan. Plaats er drie drukknoppen op, met de opschriften: Klik hier! Hier afblijven! Sluiten. Als u op de eerste knop klikt, moet er en popup-scherm verschijnen met de tekst Goed zo!, een Uitroepteken en een OK-knop. Als u op de tweede knop drukt moet er een popup verschijnen met de tekst: Dat is niet toegelaten! en een rode cirkel met een wit kruis, en de knoppen Nogmaals en Annuleren. Als u op de derde knop klikt moet het programma afsluiten.

  • Visual Basic door ir. C.Daniels 15

  • Visual Basic door ir. C.Daniels 16

    II. Lab 2 - Voorwaardelijke programma-uitvoering

    A. If then else instructie Soms is het nodig dat u in een programma een beslissing neemt. Als een bepaalde voorwaarde waar is, doet u iets, is die voorwaarde niet waar, moet u wat anders doen. In basic ziet dit er als volgt uit:

    If voorwaarde then Doe iets als de voorwaarde waar is Else Doe iets anders als ze niet waar is

    End If Voorwaarde: dit moet een test zijn, die als uitkomst waar of niet waar is, bv.

    - intAntwoord > 100 : test of intAntwoord groter is dan 100 - intAntwoord 100 then Druk af dat het groter is dan 100 Else If intGetal = 100 then Druk af dat het getal gelijk is aan 100 Else Druk af dat het getal kleiner is dan 100 End If End If

    Merk op dat er voor elke If ook een End if staat! Er zijn ook andere mogelijkheden die exact hetzelfde doen, bv.

    If intGetal = 100 then Druk af dat het getal gelijk is aan 100 Else If intGetal < 100 then Druk af dat het getal kleiner is dan 100 Else Druk af dat het getal groter is dan 100 End If End If

  • Visual Basic door ir. C.Daniels 17

    Het Else-statement moogt u weglaten, als u het niet nodig heeft. Veronderstel dat u een waarschuwing wilt geven als een getal groter is dan 10000, en niets zeggen als het kleiner is, dan kan dit als volgt: If (intGetal > 10000) then geef waarschuwing dat het getal te groot is End If Laten we dit even gebruiken in een eenvoudig programma. We zullen hierin een tekstveld gebruiken. Hierin kan de gebruiker zelf tekst of getallen typen, die we in het programma kunnen gebruiken. We zullen ons programma laten testen of een getal groter, kleiner of gelijk is aan 100. Maak een nieuw project aan, zoals in de eerste oefening.

    Plaats hierin een label met de tekst Geef een getal in:, een tekstveld, en twee

    knoppen, een om te de waarde van het getal te testen, en n om het programma af te sluiten.

    Pas de eigenschappen van de verschillende objecten als volgt aan: Formulier:

    - Caption: Test 100

    Label: - Caption: Geef een getal in:

    Knop1:

    - Name: cmdTesten - Caption: Testen - Default: true. Hierdoor wordt deze knop automatisch geselecteerd als u

    het programma start. Knop2:

    - Name: cmdSluiten - Caption:Sluiten

    Tekstveld: Name: txtGetal Alignment: Right Justify (rechts oplijnen voor een getal) Text: 0

    In het venster Form Layout zorgen we ervoor dat het programma ongeveer in het midden van het scherm opstart.

  • Visual Basic door ir. C.Daniels 18

    Een en ander moet er nu ongeveer als volgt uitzien:

    De layout van het programma is klaar. Nu moet nog de nodige programmatuur worden bijgevoegd, zodat ons programma gaat functioneren zoals we willen! Dubbelklik op de knop cmdSluiten, en voeg de code toe om het programma te laten

    afsluiten. Zie het voorgaande voorbeeld.

    Dubbelklik op de knop testen. Hier hoort het stukje programma bij, om het ingegeven getal te testen. We gebruiken hier de If-instructie:

    Rem test de waarde va n het getal! Private Sub cmdTest_Click() Dim i As Integer ' hulpvariabele voor MsgBox Dim intGetal As Integer 'de waarde in het tekstveld intGetal = Val(txtGetal.Text) ' Haal het getal uit het tekstveld If intGetal > 100 Then i = MsgBox("Het getal i s groter dan 100", vbInformation,"Test") Else If intGetal = 100 Then i = MsgBox("Het getal is gelijk aan 100", vbInformation,"Test") Else i = MsgBox("Het getal is kleiner dan 100", vbInformation,"Test") End If End If End Sub Als u de lijnen ivm de MsgBox intypt zult u zien dat de editor aanwijzingen geeft over hetgeen u moet ingeven. Bij het getal kunt u ook kiezen uit standaardwaarden zoals hier vbInformation , dit is een andere aanduiding voor de waarde 32. Maar deze is duidelijker, u weet onmiddellijk dat er een I van information wordt getoond. We kunnen het programma van commentaar voorzien:

    - Ofwel gebruik u een volledige regel als commentaarlijn. Plaats vooraan de instructie Rem van het engels:remark (opmerking)

    - Ofwel achteraan een programmaregel door een aanhalingsteken te plaatsen.

  • Visual Basic door ir. C.Daniels 19

    Merk ook op dat we de lijnen mooi laten inspringen (tab-toets!), dit verhoogt in aanzienlijke mate de leesbaarheid van het programma!

    Als we het allemaal achter elkaar zouden typen, werkt het programma even goed, maar als u moet uitzoeken hoe het in elkaar zit. En dit is maar een eenvoudig programma onderstaande layout van de programma is dus beslist af te raden! Private Sub cmdTest_Click() Dim i As Integer Dim intGetal As Int eger intGetal = Val(txtGetal.Text) ' Haal het getal uit het tekstveld If intGetal > 100 Then i = MsgBox("Het getal is groter dan 100", vbInformation,"Test") Else If intGetal = 100 Then i = MsgBox("Het getal is gelijk aan 100", vbInformation,"Test") Else i = MsgBox("Het getal is kleiner dan 100", vbInformation,"Test") End If End If End Sub

    Voeg ook veel commentaar bij in uw programma!

    Beter wat teveel uitleg, als te weinig! Als u dit programma binnen een jaar moet gaan wijzigen, zult u blij zijn met de uitleg! Of misschien moet u zelfs het programma van een andere programmeur aanpassen, en als die vergat er wat uitleg bij te schrijven kunt u aardig wat tijd verliezen om uit te zoeken, wat hij nu juist bedoelde Stel dat deze programmeur dan nog variabelen gebruikte zoals a,b,c,ak, zl,. Dan wordt het een nachtmerrie

    Als het programma klaar is ziet het eruit zoals hiernaast. Sla het project op als Oef2_1.vbp en het formulier als Form2_1.frm.

    Test eens uit wat de reactie is van het programma als u 100,5 intypt? Kunt u dat

    verklaren?

    Of als u een tekst intypt.?

    Tip:

    Tip:

  • Visual Basic door ir. C.Daniels 20

    Oefening: Programmeer nu zelf eens de volgende oefening. U moet twee gehele getallen kunnen ingeven Getal1 en Getal2. Als u op de knop Testen klikt, moet het programma vertellen in een popup welk van de twee het grootste is, of dat ze gelijk zijn.

    Sla het op als Oef2_2.vbp en FormOef2_2.frm.

    Als het programma werkt zou het er zo ongeveer moeten uitzien:

    A. Een eenvoudig spelletje: Raadspelletje

    3) De opdracht

    We laten de computer een willekeurig getal genereren tussen 0 en 100. Wij moeten raden. De computer zegt alleen of het te hoog of te laag was. Het spelletje start als volgt op: (de namen van de objecten zijn aangegeven)

    lblHoofding

    cmdRaden txtGetal

    cmdSluiten

  • Visual Basic door ir. C.Daniels 21

    Als u een foutieve ingave geeft krijgt u een foutmelding

    Anders geeft het programma een suggestie om hoger of lager te raden. Als u het gevonden heeft wordt u gefeliciteerd!

    4) Een random getal genereren Als we ons spelletje spannend willen houden moeten de computer telkens een ander getal uitzoeken om te raden. We zullen dit getal in ons programma in een variabel zetten met naam intTeRadenGetal. Voeg daarvoor de volgende code in vlak onder Option Explicit: Option Explicit Dim IntTeRadenGetal as Integer Hoe maken we nu een willekeurig getal tussen 1 en 100? VB kent de functie rnd. Deze functie genereert een willekeurig getal tussen 0 en

    0,99999. Test dit even uit! Maak het Immediate window zichtbaar als dat er niet is door in het menu op View->Immediate window te klikken.

  • Visual Basic door ir. C.Daniels 22

    In het Immediate window typt u enkele malen ?rnd [enter-toets] Het vraagteken is een verkorte vorm in basic voor de instructie print. U zal zien dat u telkens een ander getal krijgt tussen 0 en 0,999.

    Hoe maken we daaruit een geheel getal tussen 1 en 100? Dit doen we als volgt: Rnd = een getal tussen 0 en 0,999 100*Rnd =een getal tussen 1 en 99,999 Fix(100*Rnd) =neemt alleen het gedeelte voor de komma, is dus van 0 tot 99 Fix(100*Rnd)+1 =een geheel getal van 1 tot 100 Deze uitdrukking Fix(100*Rnd)+1 kunnen we dus gebruiken om een geheel getal tussen 1 en 100 te maken. Ontwerp zelf eens een formule om een willekeurig getal tussen 100 en 999 te

    genereren! Test dit uit in het Immediate Window!

    5) Randomize Er is nog een probleempje. Als we Rnd gebruiken, wordt telkens hetzelfde getal gegenereert als we het programma opstarten. Om dit te verhinderen moeten we zorgen dat de random-getallen volledig willekeurig worden. Dit kan door de klok van de pc te gebruiken als startwaarde voor de willekeurige getallen. De instructie randomize doet dit. Deze moeten we slechts nmaal toepassen bij de start van het programma. Hoe kunnen we dit laten uitvoeren bij het openen van het venster?

    6) Het event Load van een formulier Bij de start van het programma wordt het event Load van het formulier uitgevoerd. Hierin kunnen we dingen programmeren die we bij de openen van het formulier (venster) willen uitvoeren. Zorg dat de programmacode zichtbaar is.

    Als dit niet zo is, klikt u in het venster Project Explorer op de knop View code.

    View code View object

    Klik het gewenste formulier aan

  • Visual Basic door ir. C.Daniels 23

    Het programmagedeelte dat hoort bij het event Load vindt u als volgt. Klik in het venster met de programma code bovenaan op Form in de linkerdialoog, en op Load in de rechterdialoog

    Voeg de volgende toe aan het subprogramma

    Randomize intTeRadengetal = Fix(Rnd * 100) + 1 Debug.Print intTeRadengetal

    De eerste twee lijnen kennen we al. De derde lijn toont het willekeurig getal in het Immediate venster. Dit kan u helpen uw programma te debuggen. Als u deze optie niet meer nodig hebt, veegt u deze lijn weg of u zet er een Rem voor:

    Rem Debug.Print intTeRadengetal We moeten natuurlijk ook nog de code invullen om het geraden getal te testen. Deze

    code zit in het event Click van de knop cmdRaden. Het vetgedrukte gedeelte moet u zelf intypen. Daar zitten geen nieuwe dingen in behalve de Or-operator.

    Private Sub cmdRaden_Click() Dim i As Integer ' voor MsgBox Dim intGetal het ingegeven getal om te raden intGetal = Val(txtGetal.Text) ' Haal het getal uit het teks tveld ' Test of het getal tussen 1 en 100 ligt If (intGetal < 1) Or (intGetal > 100) Then i = MsgBox("Het getal moet tussen 1 en 100 liggen!", vbInformation + vbOKonly, "Foutieve ingave") ' Anders testen we of het goed is, te hoog of te laag ' e n we geven een reactie in het bovenste label Else If intGetal = intTeRadengetal Then lblHoofding.Caption = "Gefeliciteerd! Gevonden !!!" Else If intGetal < intTeRadengetal Then lblHoofding.Caption = "Raad hoger!" Else lblHoofding.Caption = "Raad lager!" End If End If End If End Sub

    Wel alles op n regel zetten!

  • Visual Basic door ir. C.Daniels 24

    7) De Or-operator Vergelijk dit met de Or-poort uit de digitale techniek! Slechts n van beide voorwaarden

    (intGetal < 1) (intGetal > 100)

    moet waar zijn opdat de volledige instructie waar zou zijn. Sla het project en het formulier op met een betekenisvolle naam, zoals Raadspel.vbp

    voor het project en Raadspel.frm voor het formulier.

    Controleer nu of het programma werkt naar behoren. Zorg in het begin dat u het Immediate venster ziet, zodat u kan controleren welk getal de computer gegenereerd heeft!

    Vr u een programma uittest kunt u het beter opslaan op schijf. De uitvoering kan mislopen, het programma kan hangen, en dan is al uw werk voor niets geweest

    B. Het programma Raadspelletje afwerken Zoals het nu is kunnen we maar n spelletje spelen. Als het getal geraden is zouden we de computer moeten laten vragen of u nog een spelletje wilt spelen. Indien ja, genereert hij weer een ander willekeurig getal, indien neen, stopt het programma.

    Probeer zelf eens of u weet waar u de code moet veranderen!

    Indien u nog niet bedreven genoeg bent staat hieronder de volledige code van het aangepaste subprogramma. Alleen de vetgedrukte delen zijn bijgevoegd. Probeer vooral het programma te begrijpen, en niet gewoon over te typen!

    Tip:

  • Visual Basic door ir. C.Daniels 25

    Private Sub cmdRaden_Click() Dim i As Integer ' voor MsgBox Dim intGetal intGetal = Val(txtGetal.Text) ' Haal het getal uit het tekstveld ' Test of het getal tussen 1 en 100 lig t If (intGetal < 1) Or (intGetal > 100) Then i = MsgBox("Het getal moet tussen 1 en 100 liggen!", vbInformation + vbOKOnly, "Foutieve ingave") ' Anders testen we of het goed is, te hoog of te laag ' en we geven een reactie in het bovenste label Else If intGetal = intTeRadengetal Then lblHoofding.Caption = "Proficiat! Gevonden !!!"

    Vraag of de speler nog een spelletje wil i = MsgBox("Nog een Spelletje?", vbQuestion + vbYesNo, "Einde spel")

    If i = vbYes Then n ieuw getal genereren intTeRadengetal = Fix(Rnd * 100) + 1 Debug.Print intTeRadengetal lblHoofding.Caption = "Geef een getal tussen 1 en 100" Else End nee, dus stoppen End If Else If intGetal < intTeRadengetal Then lblHoofding.Caption = "Raad hoger!" Else lblHoofding.Caption = "Raad lager!" End If End If End If End Sub Sla het programma op, en test het uit!

    Uitleg bij If i = vbYes The n Als u antwoordt met ja, of nee, wordt er een bepaalde waarde gestopt in de variabele i. Als u de waarde kent, kunt u daarop testen. Maar u kunt ook vaste uitdrukkingen zoals vbYes, gebruiken. Zoek in de help eens naar andere mogelijkheden voor het antwoord als u op OK klikt,

    of Cancel, Ja, Nee. Of probeer het uitdenk aan de mogelijkheid van debug.printin het Immediate venster.

    Alles op n lijn zetten

  • Visual Basic door ir. C.Daniels 26

    8) Elseif

    Er bestaat ook nog een andere vorm van de If-instructie:

    If (voorwaarde 1) then Programmacode 1 Elseif (voorwaard e 2) then Programmacode 2 Elseif (voorwaarde 3) then Programmacode 3 Elseif Endif

    Opgave: Herwerk het voorgaande spelletje en maak gebruik van deze alternatieve vorm van de If-instructie. Sla het desnoods op onder een andere naam, als u het voorgaande niet wil veranderen.

    Opgave: Voeg een teller toe aan het voorgaande programma, zodat u kunt aangeven in hoeveel maal u het getal geraden hebt. U kunt eventueel uw felicitatie laten afhangen van de snelheid waarmee men het getal vindt. Als men het extra snel vindt, zou u kunnen aangeven Fantastisch! In slechts .. keer gevonden!, of als het extra lang duurde: Proficiat! Maar kon toch wat sneller? of zo. Noem die teller bv. intAantalKeer en declareer deze in het declaratie-gedeelte onder Option Explicit. Kies (general) (Declaration) in het programmavenster.

    U kunt ervoor kiezen slechts n subprogramma te bekijken ofwel de gehele programmacode. De eerste optie is vooral interessant als uw programma wat langer wordt.

    Tip:

    En subprogramma De hele programmacode

  • Visual Basic door ir. C.Daniels 27

    III. Lab 3 containers select - menu

    A. Containers Containers zijn objecten die andere objecten kunnen bevatten. Een windows-venster is natuurlijk zo een een container. We zullen in het volgende voorbeeld een andere container leren kennen: een frame.

    9) Frame en Option Button

    Maak een nieuw project aan met de naam BtwProg. De bedoeling is om de BTW te berekenen op een bepaald geldbedrag. Geef de form de naam:BTWform, en als caption: BTW berekenen.

    Sleep op dit formulier de volgende objecten

    Object Eigenschappen Frame Name: fraBTW

    Caption: BTW% Option Button Name: optKnop1

    Caption: 6 % Value: false

    Option Button Name: optKnop2 Caption: 12 % Value: false

    Option Button Name: optKnop3 Caption: 21 % Value: true

    Label Name:lblBedrag Caption: Bedrag :

    Label Name:lblBTW Caption: BTW :

    Label Name:lblTotaal Caption: Totaal :

    Text Name: txtBedrag Alignment:right jusitify Text: (niets)

    Text Name: txtBTW Alignment:right jusitify Text: (niets)

    Text Name: txtTotaal Alignment:right jusitify Text: (niets)

    Button Name: cmdBerekenen Caption: &Berekenen Default: true

    Button Name: cmdSluiten Caption: &Sluiten Default: false

  • Visual Basic door ir. C.Daniels 28

    De eigenschap value van een selectieknop (Option Button) geeft aan of de knop aangeklikt is (true) of niet (false). De optie default van een knop geeft aan of de knop geselecteerd is, hij heeft dan een dikkere rand, en wordt ingedrukt als je op de Enter-toets duwt. Waarom worden de selectieknoppen gegroepeerd in een frame? Van elk van deze knoppen mag er slechts n enkele aangeklikt worden. Vandaar dat we ze groeperen in een frame, zodat het programma weet welke selectieknoppen n geheel vormen.

    Waarvoor dient het teken & bij de caption van de knoppen Berekenen en Sluiten?

    Als je de selectieknoppen mooi wil oplijnen, ga je als volgt te werk:

    - Klik de selectieknoppen alle drie samen aan. Om dat te bereiken moet je de shift-toets ingedrukt houden bij het aanklikken van de tweede en de derde knop.

    - Kies in het menu Format -> Align en/of Format -> Make same size. Als het formulier klaar is ziet het er als volgt uit:

    Kies het gedeelte (general) (Declarations) om je variabelen te declareren

    Dim intBTWperc As Integer Dim intBedrag As Integer Dim intBTWbedrag As Integer Dim intTotaal As Integer

    Tip:

  • Visual Basic door ir. C.Daniels 29

    De programmacode om de BTW te berekenen hoort natuurlijk bij het event Clck van de knop Berekenen. Kies in het programmavenster bovenaan cmdBerekenen en Click, of dubbelklik op de knop cmdBerekenen. De programmacode voor dit event ziet er als volgt uit:

    Private Sub cmdBerekenen_Click() intBedrag = Val( txtBedrag.Text) ' bedrag ophalen ' Kijk welk BTW - percentage van toepassing is If OptKnop1.Value Then intBTWperc = 6 ElseIf OptKnop2.Value Then intBTWperc = 12 ElseIf optKnop3.Value Then intBTWperc = 21 End If ' Nu kunnen we berekenen: intBTWbedrag = intBedrag * intBTWperc / 100 intTotaal = intBedrag + intBTWbedrag 'toon deze bedragen in het juiste tekstvenster txtBTW = Str(intBTWbedrag) txtTotaal = Str(intTotaal) End Sub

    10) Str-functie De Str-functie is de omgekeerde functie van Val. Ze zet een getal om in een tekst. In een tekstvenster kan in principe alleen tekst getoond worden(1). De code voor de knop Sluiten is bekend.

    Sla het programma op, en test het uit. Het programma werkt als je alles goed hebt gedaan. Maar er is nog een schoonheidsfoutje. Als je iets berekend hebt, en je verandert daarna van BTW-percentage, worden het BTW-bedrag en het totaal niet opnieuw berekend. En dus zien we een foutief resultaat. Om dit te verhelpen moeten we reageren op het event Click van de drie knoppen. Selecteer dit event voor elke selectieknop en vul de code als volgt aan

    Private Sub OptKnop1_Click() intBTWperc = 6 ' Nu kunnen we berekenen: intBTWbedrag = intBedrag * intBTWperc / 100

    1(VB zorgt toch dat n en ander goed verloopt, ook als je Str weglaat. Maar dit is een slechte gewoonte. Andere talen staan dit niet toe, of geven foutieve resultaten.

  • Visual Basic door ir. C.Daniels 30

    intTotaal = intBedrag + intBTWbedrag 'toon het in het juiste tekstv enster txtBTW = Str(intBTWbedrag) txtTotaal = Str(intTotaal) End Sub Private Sub OptKnop2_Click() intBTWperc = 12 ' Nu kunnen we berekenen: intBTWbedrag = intBedrag * intBTWperc / 100 intTotaal = intBedrag + intBTWbedrag 'toon het in het juiste tekstvenst er txtBTW = Str(intBTWbedrag) txtTotaal = Str(intTotaal) End Sub Private Sub optKnop3_Click() intBTWperc = 21 ' Nu kunnen we berekenen: intBTWbedrag = intBedrag * intBTWperc / 100 intTotaal = intBedrag + intBTWbedrag 'toon het in het juiste tekstvenster t xtBTW = Str(intBTWbedrag) txtTotaal = Str(intTotaal) End Sub Moet je niet allemaal typen, met knippen en plakken kun je veel bereiken! Het programma reageert nu zoals we graag willen.

    Test uit!!

    Wat doet het programma als je als bedrag 10000 ingeeft?

    Om dit probleem op te lossen moet je variabeltype veranderen van Integer naar Long. Dit type kan veel grotere gehele getallen aan.

    Pas het programma aan en zoek eens uit hoe groot het bedrag nu mag zijn voor het programma crasht

    Tip:

  • Visual Basic door ir. C.Daniels 31

    B. De Select Case intructie Als je verschillende keuzes moet maken, naargelang de waarde kun je best met de Select Case instructie.

    Select Case testwaarde Case waarde

    Programmacode als testwaardegelijk is aan waarde Case waarde1 to waarde2 Programmacode als testwaarde ligt tussen waarde1 en waarde2 Case waarde3,waarde4,

    Programmacode als testwaarde gelijk is aan waarde3 of waarde 4

    Case Else Programmacode als geen van voorgaande waar is End Case Een voorbeeldje maakt dit wat duidelijker: Dim Nummer Nummer = 8 ' Initialiseer de variabele Nummer. Select Case Nummer 'Evalueren Case 1 To 5 ' Ligt het nummer tussen 1 en 5? Debug.Print "Tussen 1 en 5" ' De volgende lijn is de enige die waar is Case 6, 7, 8 ' Ligt tussen 6 en 8 Debug.Print "Tussen 6 en 8" Case 9 To 10 ' Nummer is 9 of 10. Debug.Print "Groter dan 8" Case Else ' Ander waarden Debug.Print "Niet tussen 1 en 10" End Select Dit programmastukje zal dus de tekst Tussen 6 en 8 afdrukken in het Immediate venster.

    Maak een nieuw project aan met de naam Dobbelspel. U krijgt 100F om in te zetten bij een dobbelspel. We gaan een teerling gooien, en naargelang de waarde van de worp wordt onze score verhoogd en verlaagd als volgt:

    - Bij een 1 wint u 20F - Gooit u een 6 wint u 15F - Bij al de rest verliest u 10F.

    Als uw geld op is is het spelletje gedaan.

    De layout van ons spelletje bij het opstarten is als volgt :

  • Visual Basic door ir. C.Daniels 32

    Object Eigenschappen Form Name: Form1

    Borderstyle: Fixed Single Caption: Dobbelspel BackColor: (naar keuze)

    Label Name: lblGegooid Caption: Klik op Gooien BackColor: (naar keuze) Font: Ms Sans Serif 14p

    Knop Name : cmdGooien Caption : Gooien

    Label Name: lblScore Font:Ms Sans Serif 14p BackColor : (naar keuze)

    Tekst Name :txtScore Font :Ms Sans Serif 14p BackColor : (naar keuze)

    In het gedeelte (General) (Declarations) plaatsen we de nodige variabelen: Option Explicit Dim intGegooid As Integer ' getal gegooid door de dobbelsteen Dim intScore As Integer ' geldbedrag in kassa We initialiseren het beginbedrag in het vent Load van het formulier:

    Private Sub Form_Load() Randomize ' initialiseer de random generator intScore = 50 ' Beginbedrag op 100 F zetten

    Label lblGegooid

    Knop cmdGooien

    Label lblScore

    Tekst txtScore

  • Visual Basic door ir. C.Daniels 33

    txtScore.Text = Str(intScore) End Sub

    In de code achter het event Click van de knop cmdGooien, gebruiken we de Select Case instructie: Private Sub cmdGooien_Click() ' gooien: een random getal van 1 tot 6 intGegooid = Fix(6 * Rnd) + 1 lblGegooid.Caption = "Je hebt een " + Str(intGegooid) + " gegooid!" 'Pas de score aan Select Case intGegooid Case 1 intScore = intScore + 20 'Je wint 20 F lblGegooid.BackColor = &HFF00& 'Pas achtergrondkleur aan Case 2 To 5 intScore = intScore 10 'Je verliest hier 10 F lblGegooid.BackColor = &HFF& Case 6 i ntScore = intScore + 15 'Je wint 15 F lblGegooid.BackColor = &HFF00& End Select 'Pas het tekstveld score aan txtScore.Text = Str(intScore) End Sub

    Oefening: Zorg ervoor dat het programma eindigt als u geen geld meer heeft. Toon nog een popup met de mededeling dat uw geld op is, en laat het programma eindigen!

  • Visual Basic door ir. C.Daniels 34

    C. Een menu Stel dat we een menu willen maken in ons dobbelspelprogramma als volgt:

    In het eerste menu-item kunnen we kiezen uit verschillende beginbedragen: 50F, 100F, en 250F. De gemaakte keuze is gemerkt met een vinkje. Het programma moet opstarten met de keuze 50F aangekruist. Met de menukeuze Optie kunt u gegevens opvragen over de auteur. Merk de onderlijnde letters op. Daardoor kunt u de bijvoorbeeld de optie Beginbedrag oproepen met de muis, maar ook met de toetsencombinatie Alt-B. Om het menu aan te maken gaat u als volgt te werk:

    Selecteer het formulier waarin u een menu wilt maken

    Klik in het menu op Tools Menu Editor

    Vul de gegevens voor Caption , Name als volgt in:

    Caption Name Inspringen &BeginBedrag mnuBeginbedrag 0 & 50 mnu50 1 &100 mnu100 1 &250 mnu250 1 - mnuLijn 1 &Sluiten mnuSluiten 1 &Info mnuInfo 0 &Auteur mnuAuteur 1 Het inspringen doet u met de pijltjes naar links en rechts. Het inspringen bepaalt de structuur van het menu. Door nog verder in te springen kunt u submenus van dit menu aanmaken. Met Next springt u naar het volgende menu-item. Met Insert en Delete kunt u een menu-item tussenvoegen of verwijderen

  • Visual Basic door ir. C.Daniels 35

    Als alles goed is ziet u menu-editor eruit zoals hieronder:

    Klik op OK

    Zorg dat u onderaan geen lege lijn heeft, anders wordt het menu niet aanvaard! Verwijder ze eventueel met Delete.

    Bij het opstarten zorgen we ervoor dat het beginbedrag op 50F wordt gezet, en dat ook alleen de optie 50F in het menu is aangekruist. Het aankruisen van een menu-item gebeurt door de eigenschap Checked op true of false te zetten

    Plaats de volgende code bij in de events mnu50 Click, mnu100 Click en mnu250 Click:

    Private Sub mnu50_Click() mnu50.Checked = True mnu100.Checked = False mnu250.Checked = False intScore = 50 txtScore.Text = Str(intScore) End Sub Private Sub mnu100_Click() mnu50.Checked = False mnu100.Checked = True mnu250.Checked = False intScore = 100 txtScore .Text = Str(intScore)

    Tip:

  • Visual Basic door ir. C.Daniels 36

    End Sub Private Sub mnu250_Click() mnu50.Checked = False mnu100.Checked = False mnu250.Checked = True intScore = 250 txtScore.Text = Str(intScore) End Sub

    Als we beginnen te spelen mogen we ons bedrag niet meer kunnen aanpassen! Daarom

    moeten we deze opties uitschakelen. Dit kan door de optie enabled van deze menu-items op false te plaatsen. Tevens laten we spelletje eindigen als ons geld op is, en vragen we of we nog een spelletje willen spelen. Doe dit als volgt door het event cmdGooien Click te wijzjgen als hieronder:

    Private Sub cmdGooien_Click() Dim i As Integer ' voor msgbox mnu50.Enabled = False mnu100.Enabled = False mnu250.Enabled = False ' gooien: een random getal van 1 tot 6 intGegooid = Fix(6 * Rnd) + 1 lblGegooid.Captio n = "Je hebt een " + Str(intGegooid) + " gegooid!" 'Pas de score aan Select Case intGegooid Case 1 intScore = intScore + 20 lblGegooid.BackColor = &HFF00& Case 2 To 5 intScore = intScore - 10 lblGegooid.BackColor = &HFF& Case 6 intScore = intScore + 15 lblGegooid.BackColor = &HFF00& End Select 'Pas het tekstveld score aan txtScore.Text = Str(intScore) ' Stoppen als het geld op is If intScore

  • Visual Basic door ir. C.Daniels 37

    mnu250.Enabled = True intSco re = 50 ' Kies 50F om te starten mnu50.Checked = True mnu100.Checked = False mnu250.Checked = False txtScore.Text = Strl(intScore) lblGegooid.Caption = "Klik op gooien!" Else End End If End If End Sub

    Test het spelletje uit en zorg dat alles werkt naar behoren!

    Zorg dat de optie Sluiten uit het menu het programma stopt. (Plaats in het event mnuSluiten Click de code End)

    Als we op Info Auteur klikken moet de naam van de maker in een apart venster verschijnen:

    D. Een nieuw formulier toevoegen Voor de optie Auteur uit ons menu voegen we een nieuw zelfontworpen formulier toe aan ons project:

    Kies in het menu Project Add Form. Uit de dialoog die dan verschijnt kiest u de optie Form. Deze nieuwe form krijgt ook automatisch een eigen module. Plaats er labels op met de nodige tekst en een knop met naam cmdOK en Caption OK zoals hierboven getoond.

    Pas de eigenschappen van het formulier als volgt aan:

    Name formAuteur Caption Auteur Appearance 1- 3D Moveable False StartUpPosition 2 - CenterScreen

    Voeg in de module van Form1 de volgende code toe in het event mnuAuteur Click :

  • Visual Basic door ir. C.Daniels 38

    Private Sub mnuAuteur_Click() Form2.Show vbModal End Sub

    In de module van Form2 vult u het event cmdOK Click als volgt aan:

    Daardoor sluit het venster Auteur als u op de knop Ok klikt

    De optie vbModal betekent dat het een modaal venster betreft. Dit is een venster dat u eerst moet sluiten voor u verder kunt. Als u deze optie weglaat wordt het een modeless venster. De applicatie kan verder functioneren zonder dat dit venster moet gelsoten worden.

    Laat de optie vbModal weg, en kijk wat het verschil is. Ons project heeft nu twee formulieren. Geef deze beide een andere meer zinvolle naam als form1 en form2. Anders worden deze ook opgeslagen als Fom1.frm en Form2.frm.

    Bij een volgend project worden weer formulieren Form1, Form2, aangemaakt. Als u deze zonder naamswijziging opslaat overschrijft u uw oude formulieren en bent u dus alles kwijt! Nog beter is het voor elk project een aparte map aan te maken!

    Maak een nieuw map Dobbelspel aan, en sla het project en de twee formulieren op in deze nieuwe map.

    Tip:

  • Visual Basic door ir. C.Daniels 39

    IV. Lab 4 lusintsructies foutafhandeling - combobox

    A. Lusinstructies Soms moet u een bepaalde handeling of berekening meerdere malen herhalen. Hiervoor heeft VB speciale lusinstructies (engels: loop).

    11) ForNext De for-next-instructie ziet er als volgt uit: For teller = beginwaarde to eindwaarde step interval Doe wat Next De teller is een numerieke variabele. Deze wordt initieel gelijk gezet aan de beginwaarde en in stapjes verhoogd tot hij groter is dan de eindwaarde. Dan stopt de lus. Het gedeelte step moogt u eventueel weglaten. Dan wordt de stap automatisch gelijk aan 1 gezet. Voorbeeld 1: De volgende code:

    For i = 1 to 5 Print i; Next i

    Geeft de volgende output:

    1 2 3 4 5 (de ; zorgt ervoor dat alles op n enkele lijn wordt afgedrukt) Voorbeeld 2: De volgende code:

    For i = 2 to 4 step 0.5 Print i; Next i

    Geeft de volgende output:

    2 2.5 3 3.5 4 Voorbeeld 3: de stap mag ook negatief zijn De volgende code:

    For i = 3 to 2 step - 0.25 Print i; Next i

  • Visual Basic door ir. C.Daniels 40

    Geeft de volgende output: 3 2.75 2.5 2.25 2

    Voorbeeld 3: u mag ook variabelen gebruiken voor de beginwaarde, eindwaarde en de stap: De volgende code: intBegin = 2 i ntEinde = 7 intStap = 0.7

    For i = intBegin to intEinde step intStap Print i; Next i

    Geeft de volgende output:

    2 2.7 3.4 4.1 4.8 5.5 6.2 6.9 Oefening: we gaan dit uittesten. Hiervoor zorg u dat het Immediate venster open is.

    Indien dit niet zo is kan dat door in het menu te klikken op View Immediate Window. De for-next-instructie bestaat uit verschillende lijnen. In het Immediate venster kunt u slechts n enkele lijn typen. Maar dit kan door tussen de verschillende instructie een dubbelpunt te plaatsen. Duw op Enter om de instructie uit te voeren.

    Probeer de voorgaande voorbeelden uit in het Immediate venster Maak een lus die de getallen 5 tot 10 genereert in stapjes van 0.5 Maak een lus die de getallen 20 tot -10 genereert in stapjes van -5 Maak een lus die de getallen 1 tot 11 genereert in stapjes van 4

    Project Faculteit

    Maak een nieuw project aan met de naam Faculteit zoals hieronder getoond in de ontwerpfase:

    txtGetal cmdBerekenen

  • Visual Basic door ir. C.Daniels 41

    Geef de objecten de volgende eigenschappen:

    Formulier Name: Form1 Appearance: 0 - Flat AutoRedraw: true Font: Arial, vet, 12p

    Text Name : txtGetal Text: (leeg) Allignment: 1 Right justify

    Button Name: cmdBerekenen Caption: Berekenen

    Declareer de volgende variabelen in het gedeelte (General) (Declarations)

    Option Explicit Dim i, intGetal As Integer Dim Fac As Currency

    Plaats de volgende code in het event cmdBerekenen Click Private Sub cmdBerekenen_Click() Dim s As String 'definieer een variabele om tekst te bevatten intGe tal = Val(txtGetal.Text) ' haal de waarde uit het tekstvak ' start de berekening Fac = 1 For i = 2 To intGetal Fac = Fac * i Next ' ok, nu resultaat op het scherm afdrukken ' plaats eerst spaties tussen elke drie cijfers voor de duidelijkheid s = For mat(Fac, "### ### ### ### ###") Cls ' Maak het formulier schoon Print Str(intGetal) + "! = " + s 'druk de tekst af in het formulier End Sub

    Uitleg: - Het resultaat plaatsen we in een variabele van het type Currency. Dit kan zeer grote

    gehele getallen bevatten. Zoek op in het Addendum.

    - We gebruiken een nieuw type variabele: String. Dit is een geheugenplaats waarin u tekst kunt plaatsen. Elke letter neemt n byte in beslag in het geheugen.

    - De functie Format gebruiken we om het getal af te drukken met spaties tussen elke groep van drie cijfers. Als we dat niet doen, worden alle cijfers tegen elkaar gedrukt, wat het geheel erg onleesbaar maakt.

    - De functie Cls maakt het formulier schoon (afkorting van Clear Screen)

  • Visual Basic door ir. C.Daniels 42

    - Met Print wordt de tekst op het formulier afgedrukt. Hieronder ziet u het programma in werking. Vul een getal in in de tekstbox, en klik op berekenen. Het resultaat verschijnt bovenin het formulier.

    Als we een nieuwe berekening willen maken, klikken we in het tekstvak. Het is best dat

    dan het formulier terug wordt gewist. Plaats daarom de volgende code in het event txtGetal Click

    Private Sub txtGetal_Click() Cls End Sub

    Probeer eens of u 25! Kunt berekenen. Wat stelt u vast?

    12) WhileWend Deze lusinstructie ziet er als volgt uit

    WhileWhile voorwaarde

    Doe iets

    WendWend

    Een voorbeeldje kan dit duidelijker maken:

    Dim Counter

    Counter = 0 ' Initialiseer de variabele.

    While Counter < 20 ' Test de waarde van de teller.

    Counter = Counter + 1 ' Verhoog de teller.

    Wend ' Stop de While lus als de teller > 19.

    Debug.Print Counter ' drukt de waarde van de variabele Counter

    ' af in het Immediate window na het

    ' uitvoeren van de lus, hier dus 20.

    Tip:

  • Visual Basic door ir. C.Daniels 43

    in de For-lus hoeft u zich niets aan te trekken van de teller. Die wordt automatisch verhoogd. Bij de While-lus moet u daar zelf voor zorgen! Anders stopt uw lus niet, en uw programma hangt! Probeer dit eens uit in het Immediate venster, bv. als volgt:

    c=1: while c

  • Visual Basic door ir. C.Daniels 44

    Voorbeeld 2: drukt de getallen van 10 tot 14 af

    i=10 Do Until i>=15

    Print i; i = i + 1

    Loop Voorbeeld 3: drukt de getallen van 5 tot 9 af

    i=5 Do Print i;

    i = i + 1 Loop While i15

    Opgave: Probeer deze voorbeeldjes uit in het Immediate window!

    Opgave: Gebruik ForNext, WhileWend, Do..Loop om de getallen 11 tot 20 op het scherm te brengen. Bedenk alle mogelijkhedenen dat zijn er vele

    Welke lusinstructie gebruiken? Er zijn vele mogelijkheden om hetzelfde resultaat te bereiken:

    - Als u weet (of kunt berekenen) bij welke waarden uw lus begint en stopt, gebruikt u

    liefst een ForNext. Maar een WhileWend of DoLoop gaat ook, maar is dan omslachtiger.

    - Als u code in de lus altijd minstens nmaal wordt uitgevoerd gebruikt u best een Do Loop Wile|Until. Vermits de voorwaarde pas na het uitvoeren van de code wordt getest, wordt deze code minstens nmaal uitgevoerd

    Tip:

  • Visual Basic door ir. C.Daniels 45

    - Als de code soms niet mag worden uitgevoerd, kiest u voor de Do While|Until Loop. Als de voorwaarde niet waar is, wordt er geen code uitgevoerd.

    We zullen deze lusinstructies nog veel nodig hebben in de volgende oefeningen.

    B. Foutafhandeling: On Error Zoals u heeft vastgesteld, geeft het programma een foutmelding als het te berekenen getal te groot wordt. Het programma crasht, en stopt. Dit is niet wenselijk. Mogelijkheden om dit op te lossen zijn:

    - Belet de klant een te groot getal in te geven. (Vanaf welk getal crasht ons programma?)

    Of: - Vang de fout in het programma op

    Oefening: Pas het programma aan, zodat bij het ingeven van een te groot getal de

    gebruiker een foutmelding krijgt, en gevraagd wordt een nieuw getal in te geven. Gebruik een MsgBox.

    De fout opvangen kan ook. Er bestaat een speciale instructie On Error goto die dit realiseert: Verander de code van het event CmdBerekenen_Click als volgt:

    Private Sub cmdBerekenen_Click() Dim s As String 'definieer een variabele om tekst te bevatten intGetal = Val(txtGetal.Text) ' haal de waarde uit het tekstvak 'Vang eventuele fout op On Error GoTo Fout ' start de berekening Fac = 1 For i = 2 To intGetal Fac = Fac * i Next ' ok, nu resultaat op het scherm afdrukken ' plaats eerst spaties tussen elke drie cijfers voor de duidelijkheid s = Format(Fac, "### ### ### ### ###") Cls ' Maak het formulier schoon Print Str(intGetal) + "! = " + s 'druk de tekst af in het formulier Exit Sub ' in geval er een fout optreedt Fout: Print "Getal te groot!" End Sub

  • Visual Basic door ir. C.Daniels 46

    Uitleg: De instructie On error goto Fout zorgt ervoor dat het programma bij een fout verder gaat vanaf het label Fout:. We moeten ook de regel Exit Sub bijvoegen om te zorgen dat het programma daar stopt, als er geen fout optreedt. (Laat deze lijn eens weg, en kijk wat er gebeurt) Probeer het programma nu uit, voor kleine en grotere getallen. Ons programma zal nu niet meer crashen.

    Als u een Do- lus voortijdig wil verlaten kunt u de code Exit Do in uw lus plaatsen.

    Oefening: Fonts - lettertypes Dit is wel een zeer eenvoudige toepassing van de For-Next-lus. Het toont de letterfonts (lettertypes) die op uw pc aanwezig zijn.

    Maak een nieuw project aan met de naam Fonts1. Voeg de volgende code toe aan het event Form_Load:

    Option Explicit Dim i As Integer Private Sub Form_Load() AutoRedraw = True ' activeer Autoredraw Print "Er zijn " + Str(Screen.FontCount) + " letter types aanwezig." For i = 0 To Screen.FontCount - 1 FontName = Screen.Fonts(i) ' verander van lettertype Print Screen.Fonts(i) Next End Sub

    Uitleg:

  • Visual Basic door ir. C.Daniels 47

    - De functie Autoredraw wordt geactiveerd, het formulier wordt dan automatisch opnieuw opgevuld met tekst en tekeningen als het geopend, verplaats of van grootte wordt veranderd.

    - FontName: een eigenschap van het formulier die de naam van het gebruikte lettertype

    weergeeft of verandert - FontCount: een eigenschap van het scherm-object (Screen) die het aantal fonts telt

    die voor het scherm beschikbaar zijn. De telling begint bij 0.

    Oefening: Fonts lettergrootte Deze oefening is vergelijkbaar met de vorige maar nu worden de grootte en stijl van

    het lettertype gewijzigd. Maak een nieuw project aan met de naam Fonts2. Voeg de volgende code toe aan het event Form_Load:

    Option Explicit Dim i As Integer Private Sub Form_Load() AutoRedraw = True ' activeer Autoredraw FontName = "Arial" FontSize = 8 For i = 1 To 6 FontBold = False FontItalic = False Print "Dit is " + FontName + Str(FontSize) + " Normaal" FontBold = True FontItalic = False Print "Dit is " + FontName + Str(FontSize) + " Vetjes" FontBold = False FontItalic = True Print "Dit is " + FontName + Str(FontSize) + " Cursief"

  • Visual Basic door ir. C.Daniels 48

    FontBold = True FontItalic = True Print "Dit is " + FontName + _

    Str(FontSize) + " Vetjes en cursief" Print ' lege lijn FontSize = FontSize + 2 Next End Sub

    Uitleg:

    - We gaan nu de eigenschappen FontBold en FontItalic wijzigen. Deze kunnen de waarden True (-1) of False (0) hebben. We doen dit in een lus waarbij telkens de fontgrootte met 2 punten wordt verhoogd. Niet alle lettergroottes zijn beschikbaar. Windows neemt de grootte die het dichtst de gevraagde grootte benadert.

    - Probeer ook eens met een ander lettertype!

    C. De ComboBox Oefening: een ingewikkelder project ontwerpen.

    Laten we ons eens een ingewikkelder opgave stellen. De kunst om dit te ontwerpen is stapje voor stapje vooruitgaan.

    Probeer nooit alles ineens te programmeren, u loopt gegarandeerd de mist in!

    De opgave: We willen de waarde berekenen van ex met behulp van de reeksontwikkeling:

    !...

    !4!3!211

    432

    nxxxxx

    en

    x ++++++=

    We willen die waarde berekenen tot op een bepaalde nauwkeurigheid, tot op 1/1000, 1/1000000 en 1/1000 000 000. De klant moet een van deze drie kiezen, voor hij begint. Tevens willen we tellen hoeveel termen we nodig hadden om deze nauwkeurigheid te berekenen. Hoe te werk gaan? Er zijn vele wegen die naar Rome leiden, maar begin met n klein elementje! Ik heb gekozen om de gebruiker de nauwkeurigheid te laten kiezen. Dit is logisch want anders kunnen we niks berekenen we beginnen met het eerste stapje Stap 1: de ComboBox Om de gebruiker te laten kiezen uit enkele opties is een ComboBox het ideale object.

    Tip:

  • Visual Basic door ir. C.Daniels 49

    Comboboxes kun je op drie manieren gebruiken. Men noemt deze eigenschap de style van de ComboBox. Wij gebruiken style = 2. Dit geeft de gebruiker enkele keuzemogelijkheden, door ons opgelegd. Zoek op in de help wat de kenmerken zijn van Style 0, 1 en 2.

    Een ComboBox ziet er zo uit (style =2): En als u op de pijl klikt (als het programma runt!) moet er dit komen: Maak een nieuw project aan, met de

    naam Serie. Plaats een combobox op het formulier en enkele labels, zodat het voorlopig ontwerp er als hiernaast uitziet: (Om alles beter te kunnen oplijnen heb ik het raster op 40 twips gezet in Tools Option General)

    Zet de eigenschappen van de ComboBox als volgt: Name: comNauwkeurigheid Style: 2- Dropdown List

    Nu moeten we de items aan de Combobox toevoegen.Vermits we die onmiddellijk nodig hebben, zetten we deze code in het event Form_Load, dat bij de start van het programma wordt uitgevoerd. Hiervoor hebben we onderstaande eigenschappen van de ComboBox nodig: AddItem: Deze eigenschap laat toen een keuze in de ComboBox bij te voegen. Text: de tekst van het gekozen item. ListIndex: het volgnummer van het gekozen item. Het eerste item krijgt het nummer 0, het tweede 1, enz.

    Plaats de onderstaan de code in uw programma: Option Explicit Private Sub comNauwkeurigheid_ Click() ' voor testdoeleinden

  • Visual Basic door ir. C.Daniels 50

    Debug.Print comNauwkeurigheid.Text, comNauwkeurigheid.ListIndex

    End Sub Private Sub Form_Load() ' voeg items toe aan de ComboBox comNauwkeurigheid.AddItem ("0.001") comNauwkeurigheid.AddItem ("0.000001") comNauwkeurigheid.AddItem ("0.000000001") End Sub Laat het programma runnen. Als u selecties maakt moeten deze verschijnen in het

    Immediate window:

    Ok, dit gedeelte van het programma werkt al (hopelijk!). Indien het niet lukt, moet u de fout gaan opzoeken. Doe door tot het werkt! Vermits we met die nauwkeurigheid moeten gaan rekenen, declareren we een variabele van het type Double, die de numerieke waarde zal bevatten. Pas de programmacode als volgt aan:

    Option Explicit Private dblNauwkeurigheid As Double Priva te Sub comNauwkeurigheid_Click() ' voor testdoeleinden 'Debug.Print comNauwkeurigheid.Text, comNauwkeurigheid.ListIndex 'zet de waarde in de variabele dblNauwkeurigheid = Val(comNauwkeurigheid.Text) Debug.Print dblNauwkeurigheid 'test uit of het goed is! ! End Sub Private Sub Form_Load() comNauwkeurigheid.AddItem ("0.001") comNauwkeurigheid.AddItem ("0.000001") comNauwkeurigheid.AddItem ("0.000000001") End Sub

  • Visual Basic door ir. C.Daniels 51

    Nu moet u de waarden van dblNauwkeurigheid in het Immediate window zien verschijnen als u het programma runt. We zijn nu klaar voor de volgende stap. Stap 2: de x-waarde ingeven We hebben een veldje nodig om de x-waarde in te tikken, een knop om de berekening te starten, en een label om het resultaat te tonen. Vul daarom het project aan met de volgende objecten, zoals hieronder te zien in de ontwerpfase:

    Vul de code aan als volgt:

    Option Explicit Private dblNauwkeurigheid As Double Private dblXwaarde,dblResultaat As Double Private Sub cmdBerekenen_Click() ' Geef een waarschuwi ng als de nauwkeurigheid niet ingesteld is If (dblNauwkeurigheid = 0) Then MsgBox "Je moet eerst de nauwkeurigheid instellen!" Exit Sub ' Stop ermee End If ' Wel goed, dus gaan we verder lblResultaat.Visible = True 'Maak dit terug zichtbaar dblXwaarde = Val(txtXwaarde.Text) ' Hier moeten we later de berekening maken ' zet voorlopig het resultaat = x - waarde dblResultaat = dblXwaarde

    cmdBerekenen

    txtXwaarde

    lblResultaat

    label

  • Visual Basic door ir. C.Daniels 52

    ' En toon het in het label lblResultaat.Caption = Str(dblResultaat) End Sub Private Sub comNauwkeurigheid_Click() ' zet de waarde uit de ComboBox in de variabele dblNauwkeurigheid = Val(comNauwkeurigheid.Text) lblResultaat.Visible = False End Sub Private Sub Form_Load() comNauwkeurigheid.AddItem ("0.001") comNauwkeurigheid.AddItem ("0.000001") comNauwkeurigheid.AddItem ("0.000000001") lblResultaat.Visible = False End Sub Private Sub txtXwaarde_Change() lblResultaat.Visible = False End Sub Uitleg:

    - Het resultaat maken we onzichtbaar tot we de berekening maken met de code: lblResultaat.Visible = False

    - We geven een foutmeldng als we willen berekenen en nog geen nauwkeurigheid

    gekozen hebben. We gebruiken een vereenvoudigde methode van de MsgBox: If (dblNauwkeurigheid = 0) Then MsgBox "Je moet eerst de nauwkeurigheid instellen!" Exit Sub ' Stop ermee End If

    Test het programma weer uit. Kijk of het resultaat onzichtbaar wordt als u iets verandert aan de nauwkeurigheid of de x-waarde.

    We zijn nu klaar voor de laatste stap: de eigenlijke berekening. Dit is de moeilijkste en de voornaamste. Stap 3: berekenen De meesten vinden dit het moeilijkste. Hoe weten we bijvoorbeeld of we de gewenste nauwkeurigheid bereikt hebben? Oefening doet hier wonderen! In het begin vraagt u uzelf af hoe u eraan moet beginnen. Maar na wat oefening leert u vele technieken, die u helpen tot een oplossing te komen. De som moeten we berekenen door een aantal termen samen te tellen. Deze termen worden steeds kleiner en daardoor benaderen we steeds beter de gewenste waarde. Hoeveel termen moeten we samentellen? Dit beslissen we als volgt: we houden steeds de voorgaande waarde bij, en vergelijken deze met de nieuwe waarde als we een volgende term erbij tellen. Is dit verschil kleiner dan de gevraagde nauwkeurigheid dan stoppen we.

  • Visual Basic door ir. C.Daniels 53

    Vermits we niet weten hoeveel termen we moeten berekenen (en dus hoeveel maal we de lus moeten doorlopen) gebruiken we een While-lus. De termen berekenen gaat gemakkelijk als volgt: de n-de term is gelijk aan de voorgaande term*x/n. Zo kunnen we dus steeds de volgende waarde berekenen zonder dat we faculteiten moeten uitrekenen! De code ziet er dan als volgt uit: Private Sub cmdBerekenen_Click() Dim dblTerm, dblVorigResultaat, n As Double ' Geef een waarschuwing als de nauwkeurigheid niet ingesteld is If (dblNauwkeurigheid = 0) Then MsgBox "Je moet eerst de nauwkeurigheid instellen!" Exit Sub ' Stop ermee End If ' Wel goed, dus gaan we verder lblResultaat.Visible = True 'Maak dit terug zichtbaar dblXwaarde = Val(txtXwaarde.Text) dblTerm = 1 ' de eerste term = 1 dblResultaat = 1 ' het resultaat voorlopig ook n = 1 Do ' hier begint de lus dblVorigResultaat = dblResultaat ' bewaar het vorige resultaat dblTerm = dblTerm * dblXwaarde / n ' bereken de volgende term dblResultaat = dblResultaat + dblTerm 'tel op n = n + 1 ' verhoog n Debug.Print dblResultaa t ' alles controleren!!! Loop While Abs(dblVorigResultaat - dblResultaat) > dblNauwkeurigheid ' En toon het in het label lblResultaat.Caption = Str(dblResultaat) Debug.Print Exp(dblXwaarde) ' ter controle! End Sub Bestudeer de code goed tot u precies weet hoe ze werkt! Alleen zo leert u bruikbare

    programmas schrijven!!! Test het programma uit. Ter controle laten we ook de juiste waarde in het Immediate window afdrukken met

    Debug.Print Exp(dblXwaarde) ' ter controle! Dus hadden we die berekening niet nodig? Immers de functie Exp() berekent juist wat we zochten. Alles energie voor niets? NEE! We leren programmeren, niet rekenen. We hebben weer een beter inzicht gekregen in hoe u de dingen moet aanpakken om een ingewikkelder project te realiseren!

  • Visual Basic door ir. C.Daniels 54

    Test alles grondig uit!

    Oefening: Vul zelf het programma aan, zodat het aantal termen (aantal iteraties in

    geleerde taal) dat we nodig hadden voor de berekening in het venster wordt getoond.

    Als alles goed is ziet het resultaat er als volgt uit: Uitleg: Als u het nog moeilijk hebt om te volgen wat er in de programmacode gebeurt, probeer eens te denken zoals de computer doet! Dat gaat ongeveer als volgt: dblXwaarde = Val(txtXwaarde.Text) eerst halen we de waarde van x uit de tekstbox op, en stoppen die in een variabele in het ram - geheugen. Stel dat we x = 2 hebben ingegeven. dblTerm = 1 ' de eerste term = 1 zet de variabele dblTerm gelijk aan 1. De eerste term van de reeks is immers 1. dblResultaat = 1 ' het resultaat voorlopig ook zet d e variabele dblResultaat ook gelijk aan 1. n = 1 n is de macht van x Do ' hier begint de lus

  • Visual Basic door ir. C.Daniels 55

    We beginnen nu een lus. We berekenen elke keer dat we de lus doorlopen de volgende term in de berekening en tellen die op bij het resultaat. dblVorigResultaa t = dblResultaat ' bewaar het vorige resultaat Eerst slaan we natuurlijk de reeds bekomen waarde op in de variabele dblVorigResultaat, zodat we straks de oude en nieuwe waarde kunnen vergelijken. DblResultaat is dus nu ook 1 dblTerm = dblTerm * dblXwaard e / n ' bereken de volgende term

    Bereken de waarde van de volgende term 1x

    . Deze is nu 1*2/1 = 2

    dblResultaat = dblResultaat + dblTerm 'tel op Tel deze op bij het resultaat: dblResultaat = 1 + 2 =3 n = n + 1 ' verhoog n n wordt dus nu 2. Debug.Print dblResultaat ' alles controleren!!! Toont dit tussenresultaat in het Immediate venster ter controle Loop While Abs(dblVorigResultaat - dblResultaat) > dblNauwkeurigheid We vergelijken nu de nieuwe waarde met de oude. Als het verschil k leiner is dan de gewenste nauwkeurigheid (stel dat we deze als 0,001 hebben ingegeven), stoppen we: Abs(2 1) =1 is dus groter dan 0,001 en dus beginnen we de lus opnieuw: Do We beginnen de lus opnieuw dblVorigResultaat = dblResultaat ' bewaar het vor ige resultaat DblResultaat is dus nu ook 2 dblTerm = dblTerm * dblXwaarde / n ' bereken de volgende term

    Bereken de waarde van de volgende term !2

    2x =vorige*x/n=2*2/2 =

    2 dblResultaat = dblResultaat + dblTerm 'tel op Tel deze op bij het resultaat: dblResultaat = 3 + 2 =5 n = n + 1 ' verhoog n n wordt dus nu 3. Debug.Print dblResultaat ' alles controleren!!!

  • Visual Basic door ir. C.Daniels 56

    Toont dit tussenresultaat in het Immediate venster ter controle Loop While Abs(dblVorigResultaat - dblResultaat) > dblNauwkeurig heid We vergelijken nu opnieuw de nieuwe waarde met de oude. Als het verschil kleiner is dan de gewenste nauwkeurigheid (stel dat we deze als 0,001 hebben ingegeven), stoppen we: Abs(5 2) =3 is dus groter dan 0,001 en dus beginnen we de lus opnieuw enz totdat we de gewenste nauwkeurigheid bereikt hebben. (Vraag: waarvoor is die Abs nodig na de While?) De opeenvolgende waarden van de term zijn (voor x=2) : 1 2 2 1,333333 0,666667 0,266667 0,088889 0,025397 0,006349 0,001411 0,000282 5,13E - 05 8,55E - 06 1 ,32E - 06 en worden dus zeer snel heel klein. Waarschijnlijk zullen we dus na een tiental berekeningen de gewenste nauwkeurigheid bereiken. Het Immediate venster geeft de volgende waarden van het berekend resultaat:

    3 5 6,33333333333333 7 7,26666 666666667 7,35555555555556 7,38095238095238 7,38730158730159 7,38871252204585 7,38899470899471

    juiste waarde: 7,38905609893065 de fout is dus kleiner dan 0,001

    ' En toon het in het label lblResultaat.Caption = Str(dblResultaat) We tonen nu het resultaat in ons programmavenster

    Deze methode u in de plaats van de computer zetten is dikwijls een goede methode om uit te vissen wat er misloopt, als een programma niet werkt zoals u wil.

    Deze denkfouten zijn dikwijls moeilijker te vinden als syntax-fouten. Opgave:Pas het programma aan zodat alleen de cijfers van het resultaat waarvan u

    zeker bent, worden weergegeven.Gebruik de instructie Format.

    Opgave: Test eens uit welke de grootste waarde van x is, voor het programma een runtime fout geeft. Het programma loopt vast vanaf x=

    Opgave: Probeer deze fout op te vangen in het programma zodat er een MsgBox komt met de volgende foutmelding De ingegeven x- waarde is te groot.

    Tip:

  • Visual Basic door ir. C.Daniels 57

    Gebruik een On Error goto instructie. Test uit of het werkt!

    Opgave: Pas het aantal keuzeopties uit met een vierde mogelijkheid Zo nauwkeurig

    mogelijk. Twee opeenvolgende benaderingen moeten dan volledig gelijk zijn. Maak gebruik van de eigenschap ListIndex van de Combobox om de keuze van de gebruiker te detecteren.

    Opgave: Maak een programma waarmee u de sinus kunt berekenen, met behulp van

    de reeksontwikkeling

    ...!5!3

    )sin(53

    -+-=xx

    xx

    Controleer of de berekende waarde correct is met behulp van de functie Sin()

    U hoeft niet alles opnieuw te typen! Vertrek van het voorbeeld Serie. Maak een nieuwe map aan. Bewaar het project als Sinus.vbp in de nieuwe map met FileSave as en

    sla het formulier op als Sinus.frm. U moet dan alleen de berekening veranderen! Breid het programma uit met een ComboBox met de keuzemogelijkheden

    - E tot de macht x - Sin(x) - Cos(x)

    Zodat de gebruiker kan kiezen welke waarde hij wil berekenen.

    De reeks voor cos(x) is:

    ...!4!2

    1)cos(42

    -+-=xx

    x

    Probeer het getal pi = 3.141592653589793238462 zo nauwkeurig mogelijk te berekenen met de volgende reeksontwikkeling

    Tip:

  • Visual Basic door ir. C.Daniels 58

    ...7.5.3.13.2.1.1

    5.3.12.1.1

    3.11.1

    11

    2++++=

    p (methode van Euler)

    (uit de website: http://miha.citeglobe.com/pi/pi.eng.htm) Probeer zelf de juiste code te vinden! Als u er echt niet uitgeraakt vind u hieronder de juiste code: Private Sub cmdBerekenen_Click() Dim dblTerm, dblVorigResultaat, m, n As Double Dim lngIteraties As Long Dim i As Integer lblResultaat.Visible = True 'Maak dit terug zichtbaar 'initialisatie dblTerm = 1 dblResultaat = 1 n = 1 ' in de teller m = 3 ' in de noemer lngIteraties = 0 'Bereken nu pi/2 Do dblVorigResultaat = dblResultaat dblTerm = dblTerm * n / m dblResultaat = dblResultaat + dblTerm n = n + 1 'verhoogt met 1 m = m + 2 'verhoogt telkens met 2 lngI teraties = lngIteraties + 1 ' Debug.Print dblTerm, dblResultaat Loop While Abs(dblVorigResultaat - dblResultaat) > 0 ' En toon het in het label lblResultaat.Caption = Str(2 * dblResultaat) lblIteraties.Caption = Str(lngIteraties) End Sub Een nauwkeuriger waarde van pi vindt u op http://ic.net/~jnbohr/java/Machin.html

    Euler (1707 1783)

  • Visual Basic door ir. C.Daniels 59

    V. Lab 5 Arrays line

    A. Wat zijn arrays? Een array is een verzameling van variabelen. Ze hebben allen dezelfde naam en hetzelfde type. Men kan ze van elkaar onderscheiden door een volgnummer, index genoemd. Enkele voorbeeldjes maken dit duidelijk.

    14) Een array declareren Stel dat u 15 tellers nodig heeft. Dat kunt u een array van tellers als volgt declareren:

    Dim Tellers(14) As Integer ' 15 elementen. Tussen haakjes vermeldt u de grootte van het array. Maar vermits de laagste waarde steeds 0 is, heeft u dus n element meer.(2) Als u zoals hier 14 opgeeft voor de grootte, heb de beschikking over de variabelen Tellers(0), Teller(1),Tellers(2),. Tot tellers(14). Dat zijn er dus 15! Elk van deze kunt u gebruiken als een integer getal. Andere voorbeelden: Dim Teksten(4) as String ' 5 elementen van het type string. Dim Getallen(7) as Double ' 8 elementen van het type double.

    15) Arrays gebruiken in het programma In het programma kunt u deze tellers gebruiken door de index aan te geven. De index mag ook een variabele zijn van het type Integer of Long. Voorbeelden: Tellers(2) = 17 Teksten(3) = "En dit is het vierde!" Print Getallen( 5) Of met een Integer variabele als index i = 3 Tellers(i)= 45 'Zet Tellers(3) = 45 Oefening: Maak een nieuw project aan met als naam bijvoorbeeld OefArr1. Zet het

    weer in een aparte map.

    Declareer de volgende arrays in het gedeelte (General) (Declarations)

    Option Explicit 'Declaraties van de arrays Dim tellers(9) As Integer '10 gehele getallen Dim getallen(6) As Double ' 7 double getallen

    2 Met de instructie Option Base kun je de laagste waarde ook op n zetten, i.p.v. nul.

  • Visual Basic door ir. C.Daniels 60

    Dim teksten(3) As String ' 4 strings Dim bool(4) As Boolean ' 5 boolean

    Plaats de onderstaande code in de events Form_Click en Form_Load:

    Private Sub Form_Click() Dim i As Integer ' teller voor de For - next 'integer array For i = 0 To 9

    tellers(i) = 10 * i Print tellers(i);

    Next Print 'double array For i = 0 To 6

    getallen(i) = 7.4589 * i Print getallen(i );

    Next Print 'string array teksten(0) = "Eerste" teksten(1) = "Tweede" teksten(2) = "Derde" teksten(3) = "En dit is het vierde!" Print teksten(0), teksten(1), teksten(2), teksten(3) 'boolean array For i = 0 To 4

    bool(i) = i Print bool(i),

    Next End Sub Private Sub Form_Load()

    Form1.Caption = "Arrays" AutoRedraw = True

    End Sub Laat het programma runnen, klik op het formulier en bekijk het resultaat.

  • Visual Basic door ir. C.Daniels 61

    Uit dit voorbeeld ziet u ook dat het type Boolean eigenlijk hetzelfde als een Integer is. Alleen de waarde 0 is False, alle andere waarden worden beschouwd als True.

    Experimenteer zoveel mogelijk! Kent u bijvoorbeeld niet de betekenis van de losse Print-instructie in bovenstaand

    voorbeeld, of van de komma achteraan in de Print-instructie, laat die dan weg, en bekijk het resultaat! Of zoek het op in de Help van VB. Oefening: sorteren met bubblesort

    Getallen sorteren is en blijft een moeilijke klus voor computers. Er zijn talloze methoden uitgewerkt, en dikke boeken over geschreven. Een van de snelste methodes is de quicksort, maar is vrij ingewikkeld om te programmeren. De bubblesort is veel trager, maar wel vrij makkelijk te programmeren. We zullen eerst deze methode even uitleggen.

    16) Sorteren met bubblesort Hoe werkt bubblesort? Om dit te illustreren het volgende voorbeeld. Stel dat we getallen 7 2 8 1 3 in gesorteerde volgorde van laag naar hoog willen verkrijgen. Daarom gaan we vooraan beginnen met telkens twee opeenvolgende getallen te vergelijken, staan ze verkeerd worden ze omgewisseld:

    7 2 8 1 3 Vergelijk 7 en 2, staan verkeerd dus omwisselen

    2 7 8 1 3 Vergelijk 7 en 8, staan goed, dus niets doen 2 7 8 1 3 Vergelijk 8 en 1,staan verkeerd dus omwisselen 2 7 1 8 3 Vergelijk 8 en 3, staan verkeerd dus omwisselen 2 7 1 3 8 Na n cyclus staat het grootste getal nu achteraan We herhalen deze cyclus nog eens, het laatste getal moeten we niet meer beschouwen, dat staat al juist.

    2 7 1 3 8 Vergelijk 2 en 7, staan goed 2 7 1 3 8 Vergelijk 7 en 1, staan verkeerd dus omwisselen 2 1 7 3 8 Vergelijk 7 en 3, staan verkeerd dus omwisselen

    2 1 3 7 8 Het laatste getal stond reeds juist

    Tip:

  • Visual Basic door ir. C.Daniels 62

    Ook het voorlaatste getal, de zeven, staat nu juist. We vervolgen deze werkwijze tot alle getallen juist staan. Als alle getallen juist staan, moeten we tijdens een ganse cyclus geen omwisselingen meer uitvoeren. Hieronder staat de volgende cyclus

    2 1 3 7 8 1 2 3 7 8

    Alleen de 2 en de 1 worden nog omgewisseld. Met de andere cijfers moet niets meer gebeuren. Als we nu nog een cyclus zouden uitvoeren, wordt er niets meer omgewisseld, dus is de sortering voltooit. Het aantal omwisselingen dat we nodig hebben, hangt af van de originele getallen. De reeks 1 2 4 7 8 staat reeds juist, dus geen omwisselingen nodig, maar om de reeks 8 7 4 2 1 juist te krijgen zijn er heel wat nodig! Laten we nu een programma schrijven, dat een eenvoudige sortering zoals hierboven uitvoert. Maak een nieuw project aan met de naam Sorteren1. Geef het een weer eigen map met

    dezelfde naam.

    Plaats op het formulier twee knoppen, en geef deze objecten de volgende eigenschappen

  • Visual Basic door ir. C.Daniels 63

    Object Eigenschappen Formulier Name: Form1

    Caption: Sorteren Font: Ms Sans Serif 10p Vet Heigth:6800 twips StartUpPosition:1-CenterOwner Width: 3000 twips

    Button Name:cmdNieuw Caption:Nieuw

    Button Name:cmdSorteren Caption:Sorteren

    Plaats in de declaratie-sectie de volgende code:

    Option Explicit Const Aantal = 7 'Aantal te sorteren getallen Dim getallen(Aantal) As Integer 'Ar ray met getallen

    Plaats in het event Form_Load de volgende code:

    Private Sub Form_Load() AutoRedraw = True cmdSorteren.Enabled = False 'Knop sorteren uitzetten Randomize End Sub

    Plaats in het event cmdNieuw_Click de volgende code:

    Private Sub cmdNieuw_Click() Dim i As Integer ' hulpvariabele Cls ' Maak dit formulier schoon 'genereer de random getallen For i = 0 To Aantal - 1

    Het formulier Sorteren in de ontwerpfase

  • Visual Basic door ir. C.Daniels 64

    Getallen(i) = Int(100 * Rnd) + 1 'random getal 1 tot 10

    Print getallen(i); ' en druk ze af Next ' en druk ze af in het formulier Print: Print 'lege lijn cmdSorteren.Enabled = True ' zet de knop sorteren aan

    End Sub

    Plaats in het event cmdSorteren_Click de volgende code: Private Sub cmdSorteren_Click() Dim i, j As Integer ' hulpvariabelen Dim Gesorteerd As Boolea n ' gesorteerd? ja of nee Dim dummy As Integer 'hulpvariabele Gesorteerd = False 'Begin met gesorteerd onwaar te zetten 'Hier begint de cyclus tot als Gesorteerd waar is Do While Not (Gesorteerd) Gesorteerd = True ' Eerst aan zetten For i = 0 To Aantal - 2' Het voorlaatste heeft als index Aantal - 2 If getallen(i) > getallen(i + 1) Then 'Vergelijk dummy = getallen(i) ' Omwisselen getallen(i) = getallen(i + 1) getallen(i + 1) = dummy For j = 0 To Aantal - 1 'en afdrukken Print getallen(j); Next Print Gesorteerd = False 'nog niet goed End If

    Next i ' streepje na n cyclus Print " ---------------------------------- "

    Loop 'herbegin de cyclus cmdSorteren.Ena bled = False 'Zet de knop Sorteren uit End Sub Ons programma is af! Test het uit met verschillende reeksen. Hoeveel maal moet u gemiddeld wisselen bij 10 testrondes?

  • Visual Basic door ir. C.Daniels 65

    Opgave: Verander de code in het programma zodat er van hoog naar laag wordt

    gesorteerd. Pas het programma aan in de For-lus zodat het element achteraan, wat reeds

    gesorteerd is, niet meer in de lus wordt opgenomen. Kies een veranderlijke Laatste. Zet die eerst gelijk aan Aantal-2, en bij elke lus maakt u die n kleiner

    Wat gebeurt er als u in de For-lus Aantal - 2 vervangt door Aantal 1? Leg uit Als we grotere hoeveelheden gegevens gaan sorteren, is dat nog moeilijk te volgen. Grafisch kunnen we wat meer doen. Daarom hebben we de Line-instructie nodig. Hiermee kunt u lijnen, open rechthoeken, en opgevulde rechthoeken tekenen.

    B. De Line-instructie Tekent een lijn, rechtboek, of opgevulde rechthoek (blok) in een formulier of PictureBox. Deze ziet er als volgt uit

    Line (x1,y1) - (x2,y2), kleur, optie

    Het programma Sorteren1 nadat op de knop Nieuw werd geklikt.

    En na het klikken op de knop Sorteren. Tussen elke cyclus hebben we een lijntje getrokken. De laatste cyclus is leeg.

    Het programma Sorteren1 bij

  • Visual Basic door ir. C.Daniels 66

    Uitleg over de parameters: - x1,y1 : x en y-coordinaat van het startpunt van de lijn of de linkerbovenhoek van de

    rechthoek - x2,y2 : x en y-coordinaat van het eindpunt van de lijn of de rechterbenedenhoek van de

    rechthoek - kleur: de kleur van de rand of van de opvulling (optioneel) - optie: B open rechthoek (van het engels: block) of

    BF opgevulde rechthoek (van het engels: block filled) (optioneel) Laten we dit even toepassen