Download as pdf or txt
Download as pdf or txt
You are on page 1of 159

Programmeren in Visual Basic

Programmeren in Visual Basic


Voor het programmeren in Windows is Visual Basic een van de meest verspreide pakketten. Niet alleen dien je daarbij kennis te hebben van de programmeertaal een afgeleide van het veel oudere Basic maar je hebt ook inzicht nodig in de mogelijkheden van de grafische interface en alle besturingselementen die er deel van uitmaken. In deze cursus leer je in Visual Basic eigen programmas schrijven, gaande van een eenvoudig omrekenprogramma tot het programmeren van een volledige database.

1.

Een eerste formulier ontwerpen 1.1 Kennismaking met Visual Basic 1.1.1 Historiek van Visual Basic 1.1.2 Visual Basic opstarten 1.1.3 De Visual Basic programmeerinterface 1.2 De toolbox 1.3 Labels in het formulier 1.4 Textboxen in het formulier 1.5 CommandButtons in het formulier 1.6 Eigenschappen van het formulier 1.7 De programmacode achter de objecten 1.8 Het programma uittesten 1.9 Het project bewaren 1.10 Oefeningen Gegevens en opdrachten 2.1 Variabelen 2.2 Constanten 2.3 Operatoren 2.4 Gebeurtenissen 2.5 Methoden 2.6 Eenvoudige voorgedefinieerde functies Keuzes maken 3.1 Het besturingselement Image 3.2 Option buttons 3.3 Checkboxes 3.4 De enkelvoudige selectie : if then 3.5 De meervoudige selectie : case select 3.6 Oefeningen De iteratie 4.1 De begrensde herhaling : For next 4.2 De voorwaardelijke herhaling : Do loop 4.3 Oefeningen Nog meer besturingselementen 5.1 Lijnen 5.2 Vormen 5.3 ListBox 5.4 ComboBox 5.5 Schuifbalken 5.6 InputBox 5.7 MessageBox 5.8 Oefening

3 3 3 3 4 6 7 10 12 14 15 18 19 19 22 22 24 24 25 28 28 31 32 33 34 35 39 42 43 45 47 49 50 50 51 52 53 54 55 62 65

www.marcgoris.be

Programmeren in Visual Basic

Werken met menus 6.1 De menu-editor 6.2 De programmacode achter het menu 6.3 Oefeningen Een project met meerdere formulieren 7.1 Nieuwe formulieren toevoegen aan een project 7.2 Methoden bij het werken met formulieren 7.3 Het startscherm van het project 7.4 Openen met een splash-screen 7.5 Werken met MDI-formulieren 7.6 Globale variabelen 7.7 Oefeningen Werken met functies 8.1 Format 8.2 Procedures en subprocedures 8.3 Functieprocedures 8.4 Private, Public en Static 8.5 Werken met parameters 8.6 Oefeningen Werken met arrays 9.1 Werken in rijen : eendimensionele array 9.2 Werken in tabellen : meerdimensionele array 9.3 Dynamische array 9.4 Control array : rijen van objecten 9.5 Control arrays in menus 9.6 Oefeningen Foutafhandeling 10.1 Soorten fouten 10.2 Fouten opsporen 10.3 Fouten opvangen in het programma 10.4 Oefening Werken met bestanden 11.1 Sequentile bestanden 11.2 Random bestanden 11.3 Besturing van een Access-database Toepassingen verdeelklaar maken 12.1 Helpschermen ontwikkelen 12.2 Een installatiewizard maken Index

66 67 69 75 76 77 82 85 85 88 90 91 92 92 93 94 95 96 98 99 99 101 102 103 105 106 107 107 107 110 113 114 114 123 131 139 139 150 155

10

11

12

www.marcgoris.be

Programmeren in Visual Basic

1
1.1 1.1.1

Een eerste formulier ontwerpen

Kennismaking met Visual Basic Ontstaan van Visual Basic

De naam Basic verwijst naar de programmeertaal (Beginners All Purpose Symbolic Instruction Code) die door John Kemeny en Thomas Kurtz in 1965 werd ontwikkeld. Ondertussen echter hebben computers en besturingssystemen een hele evolutie ondergaan. Met de komst van Windows ontstond de behoefte aan een programmeeromgeving die het mogelijk maakte om makkelijk Windows-elementen, zoals schuifbalken, menus, knoppen, enz. in een toepassing te integreren. Daarom ontwikkelde Microsoft de programmeeromgeving Visual Basic, die gebruik maakt van een moderne versie van de oude Basicprogrammeertaal. In de loop van de jaren onstonden verschillende versies van Visual Basic. Vanaf de versie 5.0 is het niet meer mogelijk toepassingen te schrijven voor een 16-bits omgeving (zoals Windows 3.xx). De programmas die we schrijven in de versie 6.0 de versie waarvan we in deze cursus gebruik maken zijn dus zowiezo enkel geschikt voor Windows 95 of Windows NT en hoger. Visual Basic bestaat enkel in een Engelstalig versie. In deze cursus worden daarom ook steeds de Engelstalige benamingen van objecten of componenten gebruikt, hoewel voor een aantal daarvan ook wel een Nederlandstalig alternatief bestaat (zo heet de toolbox in het Nederlands werkset). 1.1.2 Visual Basic opstarten

Start nu het programma Visual Basic met de snelkoppeling op het bureaublad.

Bij het opstarten verschijnt dit dialoogvenster. Het bestaat uit drie tabbladen : New : om een nieuw programma te maken. Wij kiezen altijd Standard EXE in deze cursus. Existing : geeft de mogelijkheid een bestaand Visual Basicproject te openen. Recent : toont de meest recent geopende projecten.

Wil je dit dialoogvenster niet elke keer zien wanneer je Visual Basic start, dan vink je het vakje onderaan in het dialoogvenster aan.

www.marcgoris.be

Programmeren in Visual Basic

1.1.3

De Visual Basic programmeer-interface

www.marcgoris.be

Programmeren in Visual Basic

Werken met vensters Elk van de hulpvensters in Visual Basic (Toolbox, Properties, Project Explorer, ) kan uitgeschakeld worden, zodat ze niet meer op het scherm staan. Ze weer tevoorschijn halen gaat via het menu View, waarin je al deze hulpschermen en nog enkele andere trouwens kan terugvinden. Een andere mogelijkheid is het gebruik van de werkbalk, waarin zich standaard de volgende drie knoppen bevinden :

Met de eerste knop open je de Project Explorer, met de tweede het Properties venster en met de derde het form layout venster. Deze vensters staan allemaal netjes gerangschikt op het scherm, maar je kan ze ook verplaatsen. Als je dat doet, merk je dat ze automatisch een andere positie of vorm aannemen. In dat geval spreekt men van een dockable venster. Je kan die mogelijkheid aan- en uitschakelen door met de rechtermuisknop te klikken in het venster.

De programmeeromgeving aanpassen Voor je aan de slag gaat, kan je de programmeeromgeving helemaal naar je wensen aanpassen. Dat doe je door in het menu Tools de optie Options te kiezen. Er verschijnt een dialoogvenster dat bestaat uit 6 tabbladen : Editor : opties voor hulp bij het werken met de programmacode-editor. Editor format : opties om het uitzicht van de programmacode-editor aan te passen. General : instellingen voor het hulpraster, opvangen van fouten en enkele compileeropties. Docking : hier kan je kiezen welke vensters in de programmeeromgeving dockable zijn. Environment : standaardinstellingen voor het starten en afsluiten van Visual Basic. Advanced : enkele specifieke opties, zoals keuze tussen SDI en MDI en de keuze van de standaard HTML-editor.

Op sommige van de opties in dit dialoogvenster komen we nog terug verder in de cursus.

www.marcgoris.be

Programmeren in Visual Basic

1.2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

De toolbox

Uiterst links op het scherm vind je de toolbox. Dit is een zeer belangrijk onderdeel van het scherm bij het ontwerpen van je project. Hiermee plaats je immers de gewenste besturingselementen in je formulieren. Met de meeste van de besturingselementen en de manier waarop ze te gebruiken, maak je verder in deze cursus nog kennis. We gaan ze wel al benoemen.

Nog meer besturingselementen Er bestaan nog heel wat meer, gespecialiseerde besturingselementen voor de toolbox. Om die op het scherm te krijgen klik je met de rechtermuisknop op de toolbox. In het menu dat verschijnt klik je op Components waarna je in een nieuw dialoogvenster de gewenste besturingselementen kan selecteren. We gaan van die mogelijkheid zeker gebruik maken verder in deze cursus.

www.marcgoris.be

Programmeren in Visual Basic

In dit eerste hoofdstuk werken we een voorbeeldje uit voor het berekenen van een factuurbedrag. De gebruiker geeft de eenheidsprijs zonder BTW, het aantal en het BTW-percentage in. Op het scherm verschijnen het subtotaal, het BTW-bedrag en het totaal. Het formulier dat we daarvoor ontwerpen, zal eruit zien zoals hier afgebeeld.

1.3

Labels in het formulier

Labels zijn tekstvakjes in een formulier die meestal dezelfde achtergrondkleur hebben als het formulier zelf. Ze worden gebruikt om een vaste tekst op het formulier weer te geven, een beetje te vergelijken met de titels die we hebben gebruikt in TurboPascal. Maak in de toolbox het icoontje voor een label actief. Sleep nu in de linkerbovenhoek van het formulier een rechthoekje Met de formaatgrepen kan je de grootte van het veld voor het label aanpassen. Zorg ervoor dat het veld de volledige breedte van het formulier krijgt.

Objecten toevoegen met dubbelklikken en kopiren Het is eveneens mogelijk objecten toe te voegen door te dubbelklikken op het bedoelde object in de toolbox. Je zal zien dat het object dan in het midden van het scherm verschijnt, van waaruit je het dan op zn juiste plaats kunt zetten het het zn gewenste grootte kan geven. Een andere methode is kopiren en plakken. Visual Basic geeft je een waarschuwing dat je een object maakt met een reeds bestaande naam, en vraagt of het om een control array gaat. Je antwoordt negatief; arrays komen later nog aan bod. Het voordeel is wel dat de eigenschappen die je voor het origineel object had ingesteld, gewoon worden meegekopieerd, en dat kan je heel wat werk besparen.

www.marcgoris.be

Programmeren in Visual Basic

Namen geven aan besturingselementen Internationaal bestaat er een afspraak om de besturingselementen allemaal op eenzelfde manier te benoemen. Daarvoor gebruikt men de standaard die ontwikkeld werd door Leszynski en Reddick, waarin elke naam voorafgegaan wordt door een standaard prefix voor elk soort besturingselement. Een voorbeeld : een label heeft als standaard prefix lbl. De naam die we geven aan het label voor de eenheidsprijs van het product wordt dan lblEenheidsprijs. Hieronder vind je een overzicht van de prefixen voor de besturingselementen waarmee we nog leren werken in deze cursus : cbo chk cmd dat dir drv fil fra frm hsb img lbl lin combobox checkbox command button data control directory list box drive list box file list box frame form horizontal scroll bar image label line lst lvw mnu opt pic shp sld sta tlb tmr txt vsb list box list view menu option button picture shape slider statusbar toolbar timer textbox vertical scroll bar

In het venster Properties vind je de verschillende eigenschappen die we voor een label kunnen aanpassen. We overlopen de voornaamste :

(name)

Alignment

AutoSize

Backcolor

Back style

Border style

www.marcgoris.be

Programmeren in Visual Basic

Caption

Font

ForeColor

Height

Left

MousePointer

ToolTipText

Top

Visible

Width

Meten in twips In Visual Basic worden de afmetingen van en afstanden tussen objecten niet uitgedrukt in centimeters, inches of punten, maar in twips. En twip is 1/20 van een punt, en n punt is 1/72 van een inch (2,54 cm). Met een dergelijke kleine eenheid wordt het mogelijk om afmetingen en positie van een besturingselement zeer nauwkeurig te bepalen.

Maak nu de volgende aanpassingen in het Properties-venster voor het label dat we gemaakt hebben : De naam van het label wordt lblUitleg De tekst in het label wordt gecentreerd Caption wordt : Gelieve alle bedragen in te geven in Euro a.u.b. Pas de lettergrootte aan tot 14 punten, en kies voor een vet lettertype. Het lettertype blijft MS Sans Serif. De letters in dit label worden rood weergegeven.

www.marcgoris.be

Programmeren in Visual Basic

Ontwerp ook de andere labels in het formulier zoals in het voorbeeld bovenaan blz. 6. Zorg dat ze ongeveer op de juiste plaats staan. Volg de volgende objectentabel voor de namen : Object Type Naam Eigenschap Waarde

Eenheidsprijs

Label

lblEenheidsprijs lblAantal lblBTWpercentage lblSubtotaal lblBTWbedrag lblTotaal

Aantal exemplaren Label BTW-percentage Subtotaal BTW-bedrag Totaal Label Label Label Label

AutoSize Caption AutoSize Caption AutoSize Caption AutoSize Caption AutoSize Caption AutoSize Caption

True Eenheidsprijs exclusief BTW True Aantal gekochte exemplaren True BTW-percentage True Subtotaal exclusief BTW True BTW-bedrag True Totaalbedrag inclusief BTW

1.4

Textboxen in het formulier

Textboxen zijn vakjes waarin gegevens in een formulier kunnen worden ingevoerd. In principe kan je er alleen tekstgegevens ingeven, maar in je programmacode kan je ze later een getalwaarde geven. Maak in de toolbox het icoontje voor een textbox actief. Sleep nu een rechthoekje achter het label voor de eenheidsprijs. Met de formaatgrepen kan je de grootte van het veld voor de textbox aanpassen. Zorg ervoor dat het veld ongeveer de breedte heeft van de textbox in het voorbeeld dat hier afgebeeld is.

10

www.marcgoris.be

Programmeren in Visual Basic

Ook voor een textbox kan je in het venster properties een aantal specifieke eigenschappen vastleggen. We bespreken enkel de nieuwe eigenschappen die relevant zijn voor deze cursus.

Multiline

PasswordChar

Scrollbars

TabIndex

Tabstop

Text

Voeg nu nog vijf nieuwe textboxen toe in het formulier zoals in het voorbeeld op blz. 6 en volg deze objectentabel voor de namen en de eigenschappen : Object Type Naam Eigenschap Waarde

Eenheidsprijs

Textbox

txtEenheidsprijs txtAantal txtBTWpercentage txtSubtotaal

Text ToolTipText Text ToolTipText Text ToolTipText Text Tabstop Enabled

Aantal exemplaren Textbox BTW-percentage Subtotaal Textbox Textbox

(leeg) Geef hier de eenheidsprijs zonder BTW in (leeg) Geef hier het aantal exemplaren in (leeg) Geef hier het BTW-percentage in 0 False False

www.marcgoris.be

11

Programmeren in Visual Basic

Object

Type

Naam

Eigenschap

Waarde

BTW-bedrag

Textbox

txtBTWbedrag

Totaal

Textbox

txtTotaal

Text Tabstop Enabled Font Text TabStop Enabled

0 False False Vet, 14 punten 0 False False

Besturingselementen op het formulier vergrendelen Wanneer je alle labels en textboxes op de juiste plaats in het formulier hebt gezet, kan je ze vergrendelen, zodat je ze niet meer per ongeluk kan verplaatsen. Dat doe je door in het menu Format de optie Lock controls te kiezen.

Meerdere besturingselementen tegelijk selecteren Je kan meerdere besturingselementen tegelijk selecteren door het eerste element aan te klikken, en dan de volgende aan te klikken terwijl je de shift-toets ingedrukt houdt. Een andere mogelijkheid is over de besturingselementen heen slepen met de muis.

1.5

Command buttons in het formulier

Command buttons zijn opdrachtknoppen, die een bepaalde actie uitvoeren wanneer je erop klikt. Die actie programmeer je in de programmacode achter de buttons, maar daarover later meer.

Maak in de toolbox het icoontje voor een command button actief. Sleep nu een rechthoekje onderaan links in het formulier. Met de formaatgrepen kan je de grootte van het veld voor de command button aanpassen. Zorg ervoor dat het veld ongeveer de breedte heeft van de command button in het voorbeeld dat hier afgebeeld staat.

12

www.marcgoris.be

Programmeren in Visual Basic

Cancel

Default

Picture

Style

Command buttons bereikbaar maken voor toetsenbordbesturing Command buttons zijn typische objecten die bedoeld zijn om met de muis aan te sturen. Toch is het niet slecht om altijd een sneltoets te voorzien om de button toch met het toetsenbord te activeren, bijvoorbeeld als de muis niet meer zou werken. Om dit te doen plaats je een ampersand (&) voor een letter in de caption van de button. Je typt als caption dus in : &Afsluiten. In de button zal je zien dat de eerste letter achter het ampersand-teken onderlijnd werd (in het voorbeeld de A). De gebruiker van het programma kan nu de button activeren met de toetsencombinatie van de onderlijnde letter en de ALT-toets (in het voorbeeld : Alt + A). Voeg de twee andere command buttons toe zoals in het voorbeeld op blz. 6. Volg daarbij de aanwijzingen in de objectentabel zoals hieronder. Object Type Naam Eigenschap Waarde

Knop Afsluiten Knop Leegmaken Knop Berekenen

Caption ToolTipText Caption Command button cmdLeegmaken Enabled ToolTipText Default Enabled Command button cmdBerekenen Caption ToolTipText Command button cmdAfsluiten
www.marcgoris.be

&Afsluiten Klik hier om het programma af te sluiten &Leegmaken False Klik hier om alle velden leeg te maken True False Factuur &berekenen Klik hier om het factuur te berekenen
13

Programmeren in Visual Basic

1.6

Eigenschappen van het formulier

Ook een formulier heeft een aantal eigenschappen. Klik in de titelbalk van het formulier, zodat de formulierachtergrond actief is. In het venster Properties vinden we de volgende speciale eigenschappen.

Border style

Control Box

Icon

Maxbutton

Moveble

ScaleHeight ScaleWidth

ShowInTaskbar

StartUpPosition

WindowState

Geef het formulier de naam frmBerekenen, en als caption Factuurbedrag berekenen. Pas de grootte van het formulier eventueel aan.

14

www.marcgoris.be

Programmeren in Visual Basic

1.7

De programmacode achter de objecten

Welke actie de computer moet ondernemen, hangt af van de handelingen die een gebruiker uitvoert op een object. De programmacode die voor die actie moet zorgen, programmeer je achter het object. Eerst moet je bepalen achter welke objecten een actie moet schuilen, en welke die moet zijn. We noteren die eerst in een actietabel. Voor ons voorbeeld is dat : Object Gebeurtenis Actie

txtBTWPercentage cmdAfsluiten cmdLeegmaken cmdBerekenen

Wijzigen Klikken Klikken Klikken

cmdLeegmaken en cmdBerekenen aanklikbaar maken Formulier sluiten txtEenheidsprijs, txtAantal en txtBTWPercentage leegmaken txtSubtotaal, txtBTWBedrag en txtTotaal.Text = 0 CmdLeegmaken en cmdBerekenen niet-aanklikbaar maken sngSubtotaal = Val(txtEenheidsprijs) x Val(txtAantal) sngBTWBedrag = Val(txtSubtotaal) x Val(txtBTWPercentage) 100 sngTotaal = Val(txtSubtotaal) + Val(txtBTWBedrag) txtSubtotaal.Text = Str(sngSubtotaal) txtBTWBedrag = Str(sngBTWBedrag) txtTotaal.Text = Str(sngTotaal)

Je kan de programmacode achter een object ingeven, door op dat object te dubbelklikken. Het venster voor de programmacode verschijnt. Automatisch wordt de aanroep van de procedure voor de actie achter de het object, en de afsluiting van die procedure worden al automatisch getoond. De computer kiest standaard voor de meest gebruikte gebeurtenis voor het soort besturingselement waarop het betrekking heeft. Voor textboxen is dat Change en voor command buttons is dat Click.

www.marcgoris.be

15

Programmeren in Visual Basic

Je kan echter een ander object of een andere gebeurtenis kiezen met uit de keuzelijst bovenaan op het scherm voor de invoer van de programmacode :

Dubbelklik nu in de textbox txtBTWPercentage en geef de volgende programmacode in :


Private Sub txtBTWPercentage_Change()

Deze procedure maakt de knoppen Leegmaken en Factuur berekenen actief


cmdLeegmaken.Enabled = True cmdBerekenen.Enabled = True End Sub

Eigenschappen worden automatisch aangevuld In je programmacode geef je telkens weer welke eigenschap van een object in het formulier je wil wijzigen. In ons voorbeeld willen we de eigenschap Enabled van de objecten cmdLeegmaken en cmdBerekenen die we bij de aanmaak van het formulier de waarde False hadden gegeven de waarde True geven. Dat doen we door achter de naam van het object een punt te typen, en dan de naam van de eigenschap. Visual Basic maakt het je daarbij erg gemakkelijk, want bij het intypen van de naam van de eigenschap verschijnt al een keuzelijstje waaruit je de gewenste eigenschap kunt kiezen. De makkelijkste manier van werken is het selecteren van de juiste eigenschap met behulp van de pijltjestoetsen en deze dan vastleggen met behulp van de TAB-toets.

Geef nu de programmacode in voor de drie command buttons : cmdAfsluiten

Private Sub cmdAfsluiten_Click()

Deze procedure sluit het programma af


End End Sub

16

www.marcgoris.be

Programmeren in Visual Basic

cmdLeegmaken

Private Sub cmdLeegmaken_Click()

Deze procedure zet alle waarden in de textboxes weer op de beginwaarden


cmdLeegmaken.Enabled = False cmdBerekenen.Enabled = False txtEenheidsprijs.Text = "" txtAantal.Text = "" txtBTWPercentage.Text = "" txtSubtotaal.Text = 0 txtBTWBedrag.Text = 0 txtTotaal.Text = 0 End Sub

cmdBerekenen

Private Sub cmdBerekenen_Click()

Deze procedure berekent de waarden en geeft ze weer


Dim sngSubtotaal As Single Dim sngBTWBedrag As Single Dim sngTotaal As Single sngSubtotaal = Val(txtEenheidsprijs.Text) * Val(txtAantal.Text) sngBTWBedrag = sngSubtotaal * Val(txtBTWPercentage.Text) / 100 sngTotaal = sngSubtotaal + sngBTWBedrag txtSubtotaal.Text = Str(sngSubtotaal) txtBTWBedrag.Text = Str(sngBTWBedrag) txtTotaal.Text = Str(sngTotaal) End Sub

De Dim-statements aan het begin van deze procedure zijn declaraties van variabelen, in dit geval van het type Single. Daarover leer je in het tweede hoofdstuk meer. Ook de betekenis van het codewoord Private aan het begin van een procedure wordt verder in de cursus nog verklaard. Commentaartekst begint met een accentteken. Het is een gewoonte aan het begin van elke procedure in een commentaar te schrijven wat het doel is van de procedure, of wat erin gebeurt. Rekenen met getalwaarden in een textbox De gegevens in een textbox hebben in principe steeds een tekstwaarde, maar met tekstwaarden kan je niet rekenen. Daarom worden de tekstwaarden voor een berekening steeds omgezet naar een getalwaarde met de functie Val. Uitdrukking Val(9.47) Val(9.47 cm) Waarde 9.47 9.47 Visual Basic converteert een string tot het eerstvolgende alfanumeriek teken (behalve een punt, spatie, tab of regeleinde) en houdt geen rekening met de tekst die er eventueel nog achter staat. Wanneer je Windows-versie zo is geconfigureerd dat het decimaalteken een punt is. Een spatie wordt beschouwd als een decimaal teken. Met de functie Val kan je ook hexadecimale waarden omzetten naar hun decimale waarde (de hexadecimale waarde 2B is decimaal 43). Verklaring

Val(9,47) Val(1 500) Val(&H2B)

9 1500 43

De omgekeerde functie het omzetten van een getalwaarde naar een stringwaarde om in een tekstvak te schrijven is de functie Str.

www.marcgoris.be

17

Programmeren in Visual Basic

1.8

Het programma uittesten

Het programma uittesten doe je : met de run-knop in de werkbalk met de optie Start uit het menu Run met de sneltoets F5

Tijdens het uittesten kan je geen wijzigingen meer aanbrengen aan de programmacode of aan het formulier zelf. Daarvoor moet je het uittesten eerst beindigen : met de end-knop in de werkbalk met de optie End uit het menu Run met de systeemknop Stoppen in de titelbalk van het formulier in dit voorbeeld : door op de zelfgemaakte knop Afsluiten te klikken

Mogelijk heb je hier en daar een typfout gemaakt. Je zal dan bij het uittesten een foutmelding zien, zoals hier afgebeeld. Je kan je fout opsporen door op de knop Debug te klikken.

Je ziet dan het programmacode-venster verschijnen, met de regel waarin de fout zich bevindt in het geel gemarkeerd.

Een uitvoerbaar bestand maken Uiteindelijk is het natuurlijk de bedoeling om een uitvoerbaar bestand te maken dat je ook buiten een Visual Basic-omgeving kan gebruiken. Dat doe je met de optie Make Project in het menu File. Er verschijnt dan het vertrouwde dialoogvenster om het uitvoerbaar bestand te bewaren in de map die je wenst, en met een naam die je zelf kiest.

Als je een programma dat geschreven werd in Visual Basic daadwerkelijk wil verspreiden al dan niet commercieel dan komt daar nog heel wat meer bij kijken. Dat leer je in het laatste hoofdstuk van deze cursus.

18

www.marcgoris.be

Programmeren in Visual Basic

1.9

Het project bewaren

Het bewaren van een project gebeurt in twee stappen : eerst bewaar je alle formulieren en modules in een project (voorlopig is dit in ons voorbeeld slechts n formulier), en daarna bewaar je het project zelf. Kies in het menu File de optie Save Project Group. Bewaar eerst het formulier met als naam frmBerekenen Bewaar daarna het project met als naam ProjectVB01

Tip : maak voor elke oefening van Visual Basic een aparte map, waarin je enkel de onderdelen van die oefening bewaart. Zo behoud je gemakkelijk het overzicht van welke formulieren bij welk project horen.

1.10

Oefeningen

Oefening 1

Maak een programma dat de tijd berekent tussen de huidige tijd en middernacht. De gebruiker geeft de huidige tijd in uren, minuten en seconden in. De computer berekent hoeveel uren, minuten en seconden er nog zijn tot middernacht, en geeft die weer op het scherm.

Objectentabel
Object Type Naam Eigenschap Waarde

Formulier Berekenen Formulier Opdrachttitel Label Invulvak Uur Textbox Invulvak Minuut Textbox Invulvak Seconde Texbox Label uur Nu Label Label minuten Nu Label

frmBerekenen lblTijd txtNuUur txtNuMinuut txtNuSeconde lblNuUur lblNuMinuut

Caption Caption Text Text Text Caption Caption

De middernachtberekenaar Geef de huidige tijd in (leeg) (leeg) (leeg) Uur Minuut

www.marcgoris.be

19

Programmeren in Visual Basic

Object

Type

Naam

Eigenschap

Waarde

Label seconden Nu Label Middernacht Resultaat Uren Resultaat Minuten Resultaat Seconden Label nog uren Label nog minuten Label nog seconden Knop Afsluiten Knop Berekenen Knop Leegmaken

Label Label Textbox Textbox Textbox Label Label Label

lblNuSeconde lblMiddernacht txtNogUren txtNogMinuten txtNogSecondeen lblNogUren lblNogMinuten lblNogSeconden

Command button cmdAfsluiten Command button cmdBerekenen Command button cmdLeegmaken

Caption Caption Visibla Text Visibla Text Visibla Text Visibla Caption Visibla Caption Visibla Caption Visibla Caption Caption Default Caption

Seconde Tot middernacht duurt nog False (leeg) False (leeg) False (leeg) False Uren False Minuten False Seconden False &Afsluiten &Berekenen True &Leegmaken

Actietabel
Object Gebeurtenis Actie

cmdAfsluiten cmdBerekenen

Klikken Klikken

cmdLeegmaken

Klikken

Formulier sluiten bytNogUren = 23 Val(txtNuUren.Text) bytNogMinuten = 59 Val(txtNuMinuten.Text) bytNogSeconden = 60 Val(txtNuSeconden.Text) txtNogUren.Text = Str(bytNogUren) txtNogMinuten.Text = Str(bytNogMinuten) txtNogSeconden.Text = Str(bytNogSeconden) lblMiddernacht, lblNogUren, lblNogMinuten, lblNogSeconden, txtNogUren, txtNogMinuten en txtNogSeconden zichtbaar maken txtNuUren, txtNuMinuten en txtNuSeconden leegmaken lblMiddernacht, lblNogUren, lblNogMinuten, lblNogSeconden, txtNogUren, txtNogMinute en txtNogSeconden onzichtbaar maken

20

www.marcgoris.be

Programmeren in Visual Basic

Gegevenstabel
Gegeven Soort Type Bron Commentaar

bytNogUren bytNogMinuut bytNogSeconde

Var Var Var

Byte Byte Byte

frmBerekenen private frmBerekenen private frmBerekenen private

Werk de oefening verder af in Visual Basic. Bewaar het project als Oef01.

Oefening 2

Maak een programma om de kostprijs voor de herstelling van een voertuig te berekenen. De gebruiker geeft het uurloon van de monteur, het aantal gewerkte uren en de kostprijs van de nodige onderdelen (in euro) in. Bovendien kan de gebruiker de winstmarge ingeven. Die bedraagt standaard 8%, maar de gebruiker kan deze wijzigen indien gewenst. De gebruiker kan nu via twee verschillende knoppen kiezen of hij/zij de kostprijs met of zonder winst wil berekenen. In het formulier verschijnen vervolgens de kostprijs zonder BTW en de kostprijs met BTW. Maak voor deze oefening een objectentabel, een actietabel en een gegevenstabel. Werk de oefening daarna uit aan de computer. Maak daarbij het formulier na zoals het hier is afgebeeld. Bewaar het project met als naam Oef02.

Oefening 3

Maak een programma om het verschil in lengte tussen drie kinderen te berekenen. De gebruiker geeft de drie lengtes in (in cm). Daarna kiest de gebruiker van welke twee kinderen hij/zij het verschil wil berekenen. Op het scherm verschijnt het verschil in cm. Maak voor deze oefening een objectentabel, een actietabel en een gegevenstabel. Werk de oefening daarna uit aan de computer. Ontwerp daarbij zelf een overzichtelijk formulier. Bewaar het project met als naam Oef03.

www.marcgoris.be

21

Programmeren in Visual Basic

2
2.1 Variabelen

Gegevens en opdrachten

Een variabele is een naam die je geeft aan een geheugenlocatie in de computer. Die locatie kan een waarde bevatten, die bij variabelen steeds veranderlijk is. Die waarde kan een getal zijn, een tekst of een datum. Je kiest best altijd een zinvolle naam, zodat je onmiddellijk weet wat ermee bedoeld wordt. Namen van gegevens moeten altijd beginnen met een letter, mogen geen punten bevatten, moeten uniek zijn in het programma en mag maximaal 56 tekens lang zijn. We gebruiken voor de naamgeving van een variabele hetzelfde systeem van prefixen dat we ook voor objecten gebruiken. In de oefeningen in het vorige hoofdstuk ben je al enkele voorbeelden tegengekomen. In Visual Basic werken we met de volgende gegevenstypes voor variabelen : Type Byte Integer Long Single Double Currency Prefix byt int lng sng dbl cur Beschrijving Gehele getallen Gehele getallen Gehele getallen Floating point-getal, kommagetal met enkele precisie Floating point-getal, kommagetal met dubbele precisie Kommagetal met vaste decimaal (maximum 4 cijfers na het decimaalteken) Omvang 1 byte 2 bytes 4 bytes 4 bytes 8 bytes 8 bytes Bereik 0 tot 255 -32.768 tot 32.767 -2.147.483.648 tot 2.147.483.647 E 1.401298 -45 tot en met E 3.402823 38 E 4.94065645841247 -324 tot E 1.79769313486232 308 -922.337.203.685.477,5808 tot 922.337.203.685.477,5807 Getallen zonder komma : -/+ 79.228.162.514.264.337.593. 543.950.335 Getallen tot 28 cijfers na de komma : -/+ 7,922816251426433 7593543950335 1/1/100 tot 31/12/9999 True of False

Decimal

dec

Kommagetal met vaste decimaal 14 bytes (maximum 28 cijfers na het decimaalteken) Datum Logische waarde Tekst Afbeeldingen, OLE-objecten Niet gedefinieerd type

Date / Time Boolean String Object Variant

dtm bln str obj vnt

8 bytes 2 byte 1 byte per Maximum 65 000 karakters teken 4 bytes Afhankelijk van het objecttype 16 bytes + 1 byte per teken

Als je geen gegevenstype expliciet declareert, gebruikt Visual Basic voor elk gegeven het type Variant. Het spreekt voor zich dat daarbij heel wat geheugencapaciteit en dus ook verwerkingssnelheid verloren gaat. Zelfs al is dat voor de huidige generatie supersnelle computers voor kleinere toepassingen niet meer van belang, toch blijven we uitgaan van het principe dat we indien mogelijk steeds gebruik maken van het kleinst mogelijke gegevenstype voor elke variabele. Steeds werken met het type Variant is trouwens verwarrend. Zo zou je tevergeefs proberen een getal bij een stringwaarde, beide van het type Variant, op te tellen. Het opsporen van de fout wordt dan een stuk moeilijker. Verplicht declareren inschakelen Visual Basic verplicht je niet tot het declareren van gegevens, zoals dat met oudere programmeertalen wel het geval is. Toch kunnen we er het best voor zorgen dat het declareren verplicht is, al was het maar om te voorkomen dat we altijd gegevens van het type Variant zouden gebruiken. Verplicht declareren hoef je maar n keer in te stellen. De computer behoudt de instelling voor altijd, tot ze weer gewijzigd wordt. Via het menu Tools kies je de optie Options. Zorg ervoor dat het vakje Require Variable Declaration aangevinkt is.

22

www.marcgoris.be

Programmeren in Visual Basic

Expliciete declaraties

Je declarareert variabelen met het declaratiestatement Dim :


Dim sngSubtotaal As Single Dim sngBTWBedrag As Single Dim sngTotaal As Single

Die declaraties kan je eender waar in het programma inbrengen, maar bij voorkeur staan ze aan het begin van de procedure waar je ze nodig hebt. Bij het declareren van strings nemen die zoveel geheugenruimte in beslag als er tekens zijn in de string. Je kan een string echter ook een vaste lengte meegeven in een expliciete declaratie :
Dim strNaam As String*20

In dit voorbeeld wordt de string beperkt tot 20 tekens. Wanneer de tekst toch langer is dan 20, worden slechts de eerste 20 tekens bewaard. Is de string korter, dan worden de resterende tekens opgevuld met spaties.

Impliciete declaraties Type Integer Long Single Double Currency String Suffix % & ! # @ $

Je kan ook een gegevenstype toekennen door een suffix-teken toe te voegen aan de gegevensnaam, maar dat is niet voor alle variabelen mogelijk. De types die zich daartoe lenen vind je in de bijgevoegde tabel. Een voorbeeld : sngSnelheid! = intAfstand% / sngTijd!

Deze manier van werken levert soms tijdwinst op bij het werken met variabelen die slechts nmaal voorkomen, maar in de meeste gevallen valt het expliciet declareren van gegevens toch te verkiezen.

DEF-declaraties DEFkey DEFbyte DEFint DEFlng DEFsng DEFdbl DEFcur DEFdec DEFdate DEFbool DEFstr DEFobj DEFvar

Type Wanneer je grote aantallen variabelen moet declareren, kan het handig zijn om gebruik te maken van zgn. DEFkeys. Daarmee bepaal je dat alle gegevenstypes die Byte met een bepaalde letter beginnen, van hetzelfde gegevenstype zijn. Een voorbeeld : Integer Long Single DEFsng S Double Currency In dit voorbeeld zijn alle gegevens waarvan de naam begint met een S van het type Decimal single. Date Boolean Deze manier van werken kan erg tijdsbesparend zijn, maar ze maakt soms dat het String universele naamgevings-systeem niet altijd strikt kan worden toegepast. In ons Object voorbeeld immers beginnen ook string-variabelen met een s. Variant

www.marcgoris.be

23

Programmeren in Visual Basic

2.2

Constanten

Constanten lijken erg veel op variabelen. Het zijn ook geheugenplaatsen die je een naam geeft, en een waarde toekent. Het grote verschil met variabelen is dat deze waarde onveranderlijk is in de loop van het programma.

Ingebouwde constanten in Visual Basic

Visual Basic kent al een heleboel constante waarden voor specifieke doeleinden. We zullen er af en toe leren gebruik van maken in deze cursus. Een overzicht van alle voorgedefinieerde constanten in Visual Basic vind je als je in het menu View de optie Object Browser kiest. In het dialoogvenster dat nu verschijnt, vind je in het rechtervenster heel wat verzamelingen van constanten (te herkennen omdat ze eindigen met het woord Constants). Wanneer je op zon verzameling klikt, verschijnt in het linkervenster een lijst met de beschikbare constanten.

Eigen constanten gebruiken

Net zoals je variabelen declareert met het Dim-statement, declareer je constanten met het Conststatement : Const strVorm = Cirkel Const intTotaal = 360 Merk op dat we ook voor constanten dezelfde regels voor naamgeving volgen als voor variabelen. Het gebruik van eigen constanten is weinig courant, maar kan toch handig zijn in die gevallen waarin bepaalde constante gegevens erg vaak in een programma worden gebruikt.

2.3

Operatoren

Operatoren of bewerkingstekens maken het mogelijk om bewerkingen uit te voeren op gegevens. Veel van die operatoren ken je ongetwijfeld al :

Rekenkundige operatoren Operator + * / \ Mod ^ Betekenis Optellen Aftrekken Vermenigvuldigen Delen Delen met gehele getalwaarden (vb. 25,7 \ 6,2 25 / 6 = 4) De rest na deling Machtsverheffing Voorbeeld
sngPrijsIncl = sngPrijsExcl + sngBTWBedrag bytLeeftijd = bytHuidigJaar - bytGeboortejaar intOmtrek = intLengte * intBreedte sngGroottePorties = sngTotaal / sng/Aantal bytVolleEmmers = sngInhoudVat \ sngInhoudEmmer bytOverschot = sngInhoudVat Mod sngInhoudEmmer lngInhoudKubus = intLengteZijde^3

24

www.marcgoris.be

Programmeren in Visual Basic

Operatoren voor string-bewerkingen Operator Betekenis & Samenvoegen Voorbeeld


strNaam = strVoornaam & strFamilienaam strNaam = strVoornaam & & strFamilienaam strZin = Mijn naam is & strNaam

Relationele operatoren Operator = > < >= <= <> Betekenis Is gelijk aan Is groter dan Is kleiner dan Is groter dan of gelijk aan Is kleiner dan of gelijk aan Is niet gelijk aan

Relationele operatoren worden meestal gebruikt om twee voorwaarden in een selectie of een iteratie aan elkaar te toetsen, en op basis daarvan een nieuw resultaat te bekomen.

Logische (of Booleaanse) operatoren Operator AND OR NOT XOR EQV Betekenis En-koppeling Of-koppeling Niet-koppeling Exclusieve Of-koppeling Logische equivalentie Toepassing Het resultaat is waar als beide waarden waar zijn. Het resultaat is waar als n van beide waarden waar is. Er wordt een tegengestelde waarde gegenereerd. Het resultaat is waar als exact n van beide waarden waar is. Het resultaat is waar als beide waarden gelijk zijn.

Het resultaat van bewerkingen met logische operatoren is steeds een booleaanse waarde (true of false). 2.4 Gebeurtenissen Verschil tussen gebeurtenissen en operatoren Operatoren verbinden twee of meer gegevens op een bepaalde manier om een nieuw resultaat te bekomen. Gebeurtenissen (in het engels events) zijn acties die door de computer worden uitgevoerd als de gebruiker met behulp van invoerapparaten als de muis of het toetsenbord een object activeert. De procedure waarin die actie geprogrammeerd wordt, wordt ook wel event handler genoemd. In het vorige hoofdstuk hebben we leren werken met vier objecten : het formulier, het label, de textbox en de command button. Door erop te dubbelklikken werd het programmacode-venster geopend, en kon je een programmacode schrijven voor de actie die standaard op het betrokken object wordt uitgevoerd. Voor deze vier objecten is dat : Object formulier label textbox command button Standaard gebeurtenis bij activeren vanuit het ontwerpformulier Load Click Change Click

www.marcgoris.be

25

Programmeren in Visual Basic

Het is echter altijd mogelijk om de standaardgebeurtenissen te wijzigen, om bij andere handelingen van de gebruiker een ander resultaat te bekomen. Niet alle gebeurtenissen zijn echter beschikbaar voor alle objecten. Welke gebeurtenissen beschikbaar zijn voor een bepaald object, kan je zien in het programmacode-venster, door eerst het object te kiezen in de keuzelijst bovenaan rechts op het scherm, en dan de keuzelijst voor gebeurtenissen bovenaan links op het scherm.

Change

Click DblClick

Gotfocus Lostfocus

Load (enkel voor formulieren)

MouseMove

Een speciale gebeurtenis is de gebeurtenis Keypress. Met die gebeurtenis kan je een actie laten afhangen van de toets die de gebruiker ingeeft. Door in de keuzelijst de gebeurtenis Keypress te kiezen, zie je dat bij de aanroep van de procedure al onmiddellijk een variabele met de naam KeyAscii gedeclareerd wordt als integer. Het gegeven KeyAscii verwijst rechtstreeks naar het nummer van een toets of een teken in de Ascii-code. Een voorbeeld :

Private sub Form_KeyPress(KeyAscii As Integer) Demonstratie van de KeyPress-gebeurtenis if (KeyAscii<48 OR KeyAscii>57) Then txtResult.Text = Geen cijfer else txtResult.Text = Een cijfer

26

www.marcgoris.be

Programmeren in Visual Basic

Op de onderstaande tabel vind je de waarden van de toetsen die je in combinatie met de KeyPressgebeurtenis kan gebruiken. Andere waarden werden uit de tabel gehouden :

De ascii-code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 ! # $ % & ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 a b c d e f g h i j k l m n o p q r s t u v w x y z { | } 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256

Bsp TAB LF

Enter

Esc

Spatie

www.marcgoris.be

27

Programmeren in Visual Basic

2.5

Methoden

Acties die ondernomen worden door de computer omdat de status van een object verandert zonder rechtstreekse opdracht van de gebruiker, worden methoden genoemd. Ze worden geprogrammeerd op dezelfde manier als de eigenschap van een object, en worden nog het meest gebruikt bij het werken met records. Daar komen we in een van de laatste hoofdstukken van deze cursus nog op terug. SetFocus

Deze functie zet de focus automatisch in een bepaald object bijvoorbeeld nadat een andere gebeurtenis werd voltooid. Een voorbeeld : If Val(txtTotaal.Text) = 0 then txtInvoer.SetFocus

Print

Stuurt een waarde naar een aangegeven object waar ze wordt getoond of afgedrukt. De syntax van deze methode is : [object.]Print [Waarde(n)] Het probleem is dat wanneer je verschillende waarden doorstuurt, deze zonder spatie aan elkaar worden gezet. Dat kan je op twee manieren oplossen : o o Door de waarden te scheiden met een komma : de volgende waarde wordt 14 spaties verder naar links afgedrukt. Door de waarden te scheiden met chr(13) (een linefeed). De waarden worden dan onder elkaar afgedrukt.

De objecten waar naar kan worden afgedrukt zijn : o o o Het ImmediateWindow : Debug.Print De printer : Printer.Print Een formulier : frmUitvoer.Print

Een voorbeeld : Private Sub frmToets_KeyPress(KeyAscii As Integer) strTest = Chr(KeyAscii) frmToets.Print strTest chr(13) KeyAscii End Sub

2.6

Eenvoudige voorgedefinieerde functies

Met de functies Val en Str heb je in het vorige hoofdstuk al leren werken (zie blz. 17).

Algemene functies Voorbeelden If TypName(varInvoer) = Integer then

Verklaring Geeft het type van een variabele weer. Het TypeName resultaat van de functie is een tekstwaarde.

Functie

28

www.marcgoris.be

Programmeren in Visual Basic

Numerieke functies Verklaring Genereert het grootste gehele getal dat kleiner of gelijk is aan een numerieke waarde. Het gegevenstype van het resultaat is hetzelfde als die van de oorspronkelijke numerieke waarde. Behoudt enkel het gehele getal van een numerieke waarde, en laat het decimale gedeelte wegvallen. Het resultaat is een type voor gehele getallen. Genereert de absolute waarde van een getal. Het resultaat is van hetzelfde type als de oorspronkelijke waarde. Geeft als resultaat 1 bij een negatieve waarde, 0 bij de waarde 0 (of indien geen waarde is opgegeven) en +1 bij een positieve waarde groter dan 0. Geeft de vierkantswortel van een waarde. Voorbeelden Int(8.7) Int(12) Int(-5.8) Fix(8.7) Fix(-5.8) Abs(8.7) Abs(-5) Sgn(8.7) Sgn(0) Sgn(-5.8) Sqr(64) Sqr(-25) 8 Error 8 12 -6 8 -5 8.7 5 1 0 -1

Functie Int

Fix

Abs

Sgn

Sqr

Controleert of een gegeven een numerieke IsNumeric waarde heeft. Het resultaat van de functie is een boolean.

blnNumeriek = IsNumeric(txtInvoer.Text)

Alfanumerieke functies Voorbeelden Lcase(BTW-bedrag) Ucase(BTW-bedrag) btw-bedrag BTW-BEDRAG

Functie Verklaring Lcase zet een string om naar kleine letters. Lcase Ucase zet een string om naar hoofdletters. Ucase Het resultaat van beide functies is een string. Wist spaties aan het begin of einde van een string : Ltrim wist spaties aan het begin een string Ltrim Rtrim wist spaties aan het einde van een string Rtrim Trim wist spaties aan het begin en einde van Trim een string. Het resultaat van deze functies is een string. Zondert een aantal tekens uit een string af : Left Left(String,X) zondert de eerste X tekens af. Right Right(String,X) zondert de laatste X tekens af. Het resultaat van beide functies is een string. Zondert een deelstring af uit een string die Mid begint op positie X en Y karakters lang is. Het resultaat van de functie is een string. Deze functie zoekt naar een deelstring in een string, te beginnen op een bepaalde positie in een string. InStr De functie genereert een geheel getal, die de positie aangeeft van het eerste karakter van de gezochte deelstring in de string. Geeft het aantal karakters in een string. Len Het resultaat van de functie is een geheel getal. Geeft een opgegeven aantal keer de eerste String letter weer van een string. Het resultaat van de functie is een string.

Ltrim( woord ) Rtrim( woord ) Trim( woord )

woord woord woord

Left(woord,3) Right(woord,3)

woo ord ordj

Mid(woordje,3,4)

InStr(1, woord,r)

Len(woord) String(3, woord)

5 www

www.marcgoris.be

29

Programmeren in Visual Basic

Datumfuncties Verklaring Geeft de systeemdatum van de computer weer. Het resultaat van de functie is van het type Date/Time. Geeft de systeemtijd van de computer weer in uren, minuten en seconden. Het resultaat van de functie is van het type Date/Time. Geeft de systeemdatum- en tijd van de computer weer. Het resultaat van de functie is van het type Date/Time. Geeft een datum waarbij een opgegeven tijdsinterval is toegevoegd. Eerst geeft je het soort interval, daarna de grootte van de interval, en daarna de datum waarop de interval begint. Het soort interval wordt met een korte string aangeduid: yyyy q m d Jaar Kwartaal Maand Dag Voorbeelden txtNu = Date

Functie Date

Time

TxtNu = Time

Now

txtNu = Now

DateAdd(m,1, 10-05-03) 10-06-03 DateAdd(yyyy,-2, 10-05-03) 10-05-01 DateAdd(d,12, 10-05-03) 22-05-03

DateAdd

DateDiff

Het resultaat van de functie is van het type Date/Time. Geeft het interval tussen twee datums, waarbij eerst het soort interval, en daarna DateDiff(d,10-05-03,22-05-03) de begin- en einddatum worden ingegeven. 12 Voor het soort interval gelden dezelfde afspraken als voor de functie DateAdd. DateDiff(yyyy,10-05-03,01-01-05) Het resultaat van de functie is een geheel 2 getal, dat eventueel naar boven wordt afgerond. Geeft een deel uit een datum of uit een tijd DatePart(yyyy, Date) 2003 weer. yyyy q m d h n s Jaar Kwartaal Maand Dag Uur Minuut Seconde DatePart(d, 10-05-03) DatePart(n, 15:32:47) 10 32

DatePart

Year Month Day Hour Minute Second

Het resultaat is een geheel getal. Opm : voor het afzonderen van een element uit een datum kunnen ook de functies Year, Month, Day, Hour, Minute of Second gebruikt worden.

Year(Date) Day(10-05-03) Minute(15:32:47)

2003 10 32

30

www.marcgoris.be

Programmeren in Visual Basic

Keuzes maken

In oudere programmeertalen (zoals TurboPascal) zijn we voor het maken van een keuze beperkt tot de selectiestructuur in de programmacode. In Visual Basic kunnen we de gebruiker ook keuzes laten maken met behulp van objecten. De typische objecten daarvoor zijn option buttons en check boxes. In dit hoofdstuk komen die eerst aan bod. Daarna kijken we naar de enkelvoudige selectie (if then) en de meervoudige selectie (Case) in de programmacode. In dit hoofdstuk werken we het project Rijbewijs uit. In dit programma is het de bedoeling om weer te geven met welke voertuigen iemand mag rijden. De gebruiker geeft zijn/haar geslacht, geboortedatum en het type van rijbewijs in waarover hij/zij beschikt. De computer controleert of de gebruiker wel oud genoeg is voor het rijbewijs dat hij/zij heeft aangeduid. Voor een rijbewijs A3 moet je 16 jaar oud zijn, voor een rijbewijs D moet je 21 jaar oud zijn. Voor alle andere rijbewijzen moet je 18 jaar oud zijn. Indien de gebruiker te jong is, verschijnt in het formulier de boodschap : U bent te jong voor dit type van rijbewijs. Indien de gebruiker geen geboortedatum heeft ingegeven, verschijnt de boodschap : U moet eerst uw geboortedatum ingeven. In de andere gevallen verschijnt in het formulier de boodschap : Deze [man / vrouw] mag rijden met een [lijst van voertuigen]. Voor alle duidelijkheid de lijst van voertuigen : A3 A2/A1 B C D E bromfiets motorfiets personenwagen vrachtwagen autobus aanhangwagen

Maak de basis van het formulier (formulier, labels, textbox en command buttos) nu aan op basis van deze objectentabel : Object Type Naam Eigenschap Waarde

Formulier Rijbewijs Keuze geslacht Ingave geboortedatum Keuze rijbewijs Vak geboortedatum Resultaat

Formulier Label Label Label Textbox Label

frmRijbewijs lblGeslacht lblGebDat lblRijbewijs txtGebDat lblResultaat txtGebDat

Invulvak Geboortedat. Textbox Knop Afsluiten

Command button cmdAfsluiten

Caption Caption Caption Caption Text Caption Font Alignment Text Caption ToolTipText

Rijbewijs Je geslacht: Je geboortedatum: Over welk rijbewijs beschik je? (leeg) (leeg) 12 ptn, vet Gecentreerd (leeg) &Afsluiten Klik hier om af te sluiten

www.marcgoris.be

31

Programmeren in Visual Basic

Object

Type

Naam

Eigenschap Waarde

Caption ToolTipText Caption Knop Controleren Command button cmdControleren Default ToolTipText Knop Leegmaken Command button cmdLeegmaken
3.1 Het besturingselement Image Om de selectie van het geslacht te maken, gebruiken we symbolen in plaats van tekst. Die symbolen zijn eigenlijk grafische bestandjes (transparante GIF-bestandjes). Je vindt ze op je diskette of in je netwerk-map met de namen man.gif en vrouw.gif. Om ze op het scherm te plaatsen ga je als volgt te werk : Klik op het icoontje Image in de toolbox. Er verschijnt een leeg kadertje op het formulier. Klik in het venster Properties achter Picture op het knopje met de drie puntjes.

&Leegmaken Hiermee maak je het formulier leeg &Controleren True De geldigheid van het rijbewijs controleren

Zoek de locatie van de afbeelding man.gif en voeg ze in. Sleep de afbeelding naar de juiste plaats in het formulier. Doe nu hetzelfde voor de afbeelding vrouw.gif. BorderStyle

Picture

Stretch

Image versus picture box Een afbeelding kan je eveneens invoegen via het besturingselement picture box in de toolbox. Een picture box bevat een aantal gespecialiseerde mogelijkheden, maar vraagt ook meer verwerkingscapaciteit van de computer. We gebruiken daarom een gewone image.

32

www.marcgoris.be

Programmeren in Visual Basic

3.2

Option buttons

Voor de keuze van het geslacht gebruiken we option buttons (in het Nederlands keuzerondjes). Dat zijn besturingselementen waarvan er telkens maar ntje tegelijk kan geactiveerd worden. Wanneer een andere option button geactiveerd wordt, wordt de vorige gedesactiveerd. Je kan zoveel keuzerondjes in een formulier zetten als je wil, er zal er telkens maar ntje tegelijk actief kunnen zijn. Dubbelklik op het icoontje voor een option button in de toolbox. In het midden van het formulier verschijnt nu een keuzerondje. Sleep het rondje tot het net onder het pictogram voor Man staat. Verklein nu het veld voor de option button tot de formaatgrepen net omheen het rondje passen. Zet op dezelfde manier een keuzerondje net onder het pictogram voor vrouw.

Alignment

Value

Meerdere sets option buttons in n formulier

Normaal kan er op n formulier slechts n option button de waarde True krijgen. Soms wil je de gebruiker echter de mogelijkheid geven om twee verschillende keuzes te maken, zoals in dit voorbeeld een keuze voor het geslacht en eentje voor de moedertaal. Dat kan door ze te groeperen in frames. De option buttons in de verschillende frames benvloeden elkaar dan niet meer. Zo ga je te werk : Klik in de toolbox op het icoontje voor een frame. Teken in het formulier een frame dat groot genoeg is om alle elementen (pictogrammen en option buttons) in te krijgen. Plaats nu de elementen in het frame.

Het is belangrijk dat je eerst het frame tekent, en daarna de elementen erin plaatst. Eerst de elementen in het formulier maken, daarna het frame tekenen en de elementen erin slepen lukt niet.

www.marcgoris.be

33

Programmeren in Visual Basic

3.3

Check boxes

Een checkbox is een besturingselement waarvan de gebruiker van het programma er zoveel kan activeren als hij of zij zelf wil dit in tegenstelling tot de option button, waarvan er telkens maar n actief kan worden gemaakt.

Style

Value

Checked : Unchecked : Grayed :

We gaan nu de zes check boxes in het formulier tekenen zoals in het voorbeeld op blz. 31 : Klik in de toolbox op het icoon voor een check box. Teken de checkbox op de juiste plaats in het formulier. Voorzie voldoende plaats voor de bijhorende tekst. Voorlopig is dat nog Check1, maar die tekst veranderen we zodadelijk wel. Teken nu nog de andere vijf check boxes.

Pas nu de eigenschappen van de nieuwe besturingselementen in het formulier aan volgens deze objectentabel : Object Type Naam Eigenschap Waarde

Pictogram Man Pictogram Vrouw Keuzerondje Man Keuzerondje Vrouw Rijbewijs A3 Rijbewijs A2/A1 Rijbewijs B Rijbewijs C Rijbewijs D Rijbewijs E
34

Image Image Option button Option button Check box Check box Check box Check box Check box Check box

imgMan imgVrouw optMan optVrouw chkA3 chkA2A1 chkB chkC chkD chkE

Picture Picture Value Caption Caption Caption Caption Caption Caption Caption Caption

Man.gif Vrouw.gif True (leeg) (leeg) A3 A2/A1 B C D E

www.marcgoris.be

Programmeren in Visual Basic

Je kan de programmacode achter de volgende twee command buttons al ingeven : cmdAfsluiten Private Sub cmdAfsluiten_Click() End End Sub

cmdLeegmaken

Private Sub cmdLeegmaken_Click() optMan.Value = True optVrouw.Value = False txtGebDat.Text = "" chkA3.Value = Unchecked chkA2A1.Value = Unchecked chkB.Value = Unchecked chkC.Value = Unchecked chkD.Value = Unchecked chkE.Value = Unchecked lblResultaat.Caption = "" End Sub

3.4

De enkelvoudige selectie : if then

Welke acties moeten er gebeuren bij het klikken op de command button cmdControleren? .. .. .. .. .. .. .. .. .. .. Zet de bovenstaande acties in de juiste volgorde waarin ze moeten geprogrammeerd worden.

www.marcgoris.be

35

Programmeren in Visual Basic

Berekening van de leeftijd

Actietabel
Object Gebeurtenis Actie

cmdControleren

Klikken

Als txtGebDat niet leeg is dan intLeeftijd = DateDiff(yyyy, txtGebDat.Text, Date)

Gegevenstabel
Gegeven Soort Type Bron Commentaar

intLeeftijd

Var

Integer

frmRijbewijs private

Waarom staat deze berekening in een selectie? .. .. .. .. ..

Pogrammacode
Private Sub cmdControleren_Click() Dim intLeeftijd As Integer If txtGebDat.Text <> "" Then intLeeftijd = DateDiff("yyyy", txtGebDat.Text, Date) End If

De syntax van een enkelvoudige selectie If [voorwaarde] Then [Opdracht 1 Opdracht 2 ] Else [Opdracht 3 Opdracht 4 ..] End If Het Else-gedeelte is niet verplicht. Een enkelvoudige selectie wordt in Visual Basic altijd afgesloten met End If.

36

www.marcgoris.be

Programmeren in Visual Basic

Bepaling van het geslacht

Actietabel
Object Gebeurtenis Actie

cmdControleren

Klikken

Als optMan geselecteerd is dan strGeslacht = man zoniet strGeslacht = vrouw


Type Bron Commentaar

Gegevenstabel
Gegeven Soort

strGeslacht

Var

String

frmRijbewijs private

Pogrammacode
Private Sub cmdControleren_Click() Dim intLeeftijd As Integer Dim strGeslacht As String ... If optMan.Value = True Then strGeslacht = "man" Else strGeslacht = "vrouw" End If

Samenstelling van de resultaatstring indien de gebruiker oud genoeg is voor het rijbewijs

Actietabel
Object Gebeurtenis Actie

cmdControleren

Klikken

strVoertuig leegmaken Als chkA3 aangevinkt is dan strVoertuig = strVoertuig & bromfiets & regeleinde Als chkA2A1 aangevinkt is dan strVoertuig = strVoertuig & motorfiets & regeleinde Als chkB aangevinkt is dan strVoertuig = strVoertuig & personenwagen & regeleinde Als chkC aangevinkt is dan strVoertuig = strVoertuig & vrachtwagen & regeleinde Als chkD aangevinkt is dan strVoertuig = strVoertuig & autobus & regeleinde Als chkE aangevinkt is dan strVoertuig = strVoertuig & aanhangwagen & regeleinde lblResultaat = Deze & strGeslacht & mag rijden met een & strVoertuig
www.marcgoris.be 37

Programmeren in Visual Basic

Gegevenstabel
Gegeven Soort Type Bron Commentaar

strVoertuig

Var

String

frmRijbewijs private

Pogrammacode
Private Sub cmdControleren_Click() Dim intLeeftijd As Integer Dim strGeslacht As String Dim strVoertuig As String ... strVoertuig = "" If chkA3.Value = Checked Then strVoertuig = strVoertuig & "bromfiets" & vbCrLf End If If chkA2A1.Value = Checked Then strVoertuig = strVoertuig & "motorfiets" & vbCrLf End If If chkB.Value = Checked Then strVoertuig = strVoertuig & "personenwagen" & vbCrLf End If If chkC.Value = Checked Then strVoertuig = strVoertuig & "vrachtwagen" & vbCrLf End If If chkD.Value = Checked Then strVoertuig = strVoertuig & "autobus" & vbCrLf End If If chkE.Value = Checked Then strVoertuig = strVoertuig & "aanhangwagen" End If lblResultaat.Caption = "Deze " & strGeslacht & " mag rijden met een " & strVoertuig

Het gebruik van de Visual Basic-constante regeleinde Zoals we al eerder hebben geleerd, kan je in Visual Basic werken met voorgedefinieerde constanten. En van de meest gebruikte Visual Basic-constanten is de constante voor een regeleinde : vbCrLf. Met deze constante (van het type string) geef je aan dat het volgende gegeven of onderdeel op een nieuwe regel moet beginnen. In ons voorbeeld gebruiken we deze constante om ervoor te zorgen dat de voertuigen waarvoor de rijbewijzen geselecteerd werden, niet achter elkaar aan elkaar plakken, maar wel netjes onder elkaar komen te staan.

38

www.marcgoris.be

Programmeren in Visual Basic

3.5

De meervoudige selectie : select case

Met een enkelvoudige selectie heb je slechts twee mogelijkheden na een voorwaarde : waar of onwaar. Om drie mogelijke uitkomsten te creren, kan je daarom twee enkelvoudige selecties in elkaar programmeren : If strAttest = C Then txtCommentaar.Text = U moet het jaar overzitten. Else If strAttest = B Then txCommentaar.Text = U mag overgaan, maar niet in deze studierichting. Else txtCommentaar.Text = U mag overgaan naar het volgende studiejaar. End If End If Deze structuur van in elkaar geprogrammeerde enkelvoudige selecties, noemt men geneste selecties. Ze hebben het nadeel dat ze vrij omslachtig zijn, en weinig overzichtelijk. Een betere oplossing is vaak het gebruik maken van meervoudige selecties : Select Case strAttest Case C txtCommentaar.Text = U moet het jaar overzitten. Case B txCommentaar.Text = U mag overgaan, maar niet in deze studierichting. Case Else txtCommentaar.Text = U mag overgaan naar het volgende studiejaar. End Select Er bestaat nog een tweede manier om gebruik te maken van meervoudige selecties, waarbij niet de waarde van een constante, maar wel de status van een besturingselement centraal staat : Select Case True Case optAttestC.Value txtCommentaar.Text = U moet het jaar overzitten. Case optAttestB.Value txCommentaar.Text = U mag overgaan, maar niet in deze studierichting. Case Else txtCommentaar.Text = U mag overgaan naar het volgende studiejaar. End Select De syntax van een meervoudige selectie Select Case [Variabele] Case [waarde van variabele] Opdracht1 Opdracht2 Case [waarde van variabele] Opdracht1 Opdracht2 Case Else End Select Select Case [Waarde] Case [Eigenschap van besturingselement1] Opdracht1 Opdracht2 Case [Eigenschap van besturingselement2] Opdracht1 Opdracht2 . Case Else End Select

Het Case Else-gedeelte is niet verplicht. Een meervoudige selectie wordt in Visual Basic altijd afgesloten met End Select.

www.marcgoris.be

39

Programmeren in Visual Basic

Controle of de gebruiker niet te jong is voor de gekozen rijbewijzen

Actietabel
Object Gebeurtenis Actie

cmdControleren

Klikken

Selectiekeuze True Keuze chkA3 is aangevinkt en intLeeftijd < 16 dan LblResultaat = strTeJong Keuze chkA2A1 is aangevinkt en intLeeftijd < 18 dan LblResultaat = strTeJong Keuze chkB is aangevinkt en intLeeftijd < 18 dan LblResultaat = strTeJong Keuze chkC is aangevinkt en intLeeftijd < 18 dan LblResultaat = strTeJong Keuze chkD is aangevinkt en intLeeftijd < 21 dan LblResultaat = strTeJong Keuze chkE is aangevinkt en intLeeftijd < 18 dan LblResultaat = strTeJong Einde selectiekeuze
Bron Commentaar

Gegevenstabel
Gegeven Soort Type

strTeJong

Const String

frmRijbewijs private

"U bent te jong voor dit type van rijbewijs"

Programmacode
Private Sub cmdControleren_Click() Const strTeJong = "U bent te jong voor dit type van rijbewijs" Dim intLeeftijd As Integer Dim strVoertuig As String Dim strGeslacht As String ... Select Case True Case (chkA3.Value = Checked And intLeeftijd < 16) lblResultaat.Caption = strTeJong Case (chkA2A1.Value = Checked And intLeeftijd < 18) lblResultaat.Caption = strTeJong Case (chkB.Value = Checked And intLeeftijd < 18) lblResultaat.Caption = strTeJong Case (chkC.Value = Checked And intLeeftijd < 18) lblResultaat.Caption = strTeJong Case (chkD.Value = Checked And intLeeftijd < 21) lblResultaat.Caption = strTeJong Case (chkE.Value = Checked And intLeeftijd < 18) lblResultaat.Caption = strTeJong End Select

40

www.marcgoris.be

Programmeren in Visual Basic

Belangrijke opmerking : wanneer de computer bij het doorlopen van de reeks voorwaarden n keer een actie moet ondernemen, worden alle volgende voorwaarden in de reeks niet meer getest, maar wordt de selectiestructuur onmiddellijk afgesloten. Een voorbeeld : stel dat ik de rijbewijzen A3, A1/A2, B en C zou hebben aangevinkt in het formulier, maar slechts 17 jaar oud ben. De computer onderneemt de volgende stappen : 1. Controle van de eerste voorwaarde (chkA3.Value = Checked And intLeeftijd < 16). Deze voorwaarde is onwaar, aangezien de leeftijd niet kleiner is dan 16. De computer voert de actie achter deze voorwaarde dus niet uit. 2. Controle van de tweede voorwaarde (chkA2A1.Value = Checked And intLeeftijd < 18). Deze voorwaarde is waar, daar ik de check box A2/A1 had aangevinkt, en de leeftijd kleiner is dan 18 jaar. De computer voert de actie achter de voorwaarde dus wel uit. Op het scherm verschijnt dat ik te jong ben voor dit rijbewijs. 3. Ook de derde en de vierde voorwaarde zijn ook waar. Er werd echter n voorwaarde gevonden die waar was, en de actie werd uitgevoerd. De computer zal de keuzestructuur beindigen zonder de vier volgende voorwaarden te controleren. Dit verklaart meteen ook waarom we voor de subroutine om de voertuigen toe te voegen aan de resultaatstring, gebruik hebben gemaakt van 6 aparte enkelvoudige selecties, en niet van de meervoudige selectie. Als we dat wel hadden gedaan, zou de computer bij drie aangevinkte soorten rijbewijzen, slechts het eerste toegelaten voertuig tonen. Gebruik van logische (of booleaanse) operatoren in een voorwaarde Wanneer we gebruik willen maken van logische operatoren in een voorwaarde, moeten de twee gekoppelde voorwaarden wel in een geheel tussen haakjes staan : Case (chkB.Value = Checked And intLeeftijd < 18) Dit is een belangrijk verschil met TurboPascal, waar de beide voorwaarden apart tussen haakjes moesten staan.

Controle of de gebruiker de geboortedatum wel heeft ingevuld

Actietabel
Object Gebeurtenis Actie

cmdControleren

Klikken

Als txtGebDat leeg is dan lblResultaat = U moet eerst uw geboortedatum ingeven

Programmacode
Private Sub cmdControleren_Click() Const strTeJong = "U bent te jong voor dit type van rijbewijs" Dim intLeeftijd As Integer Dim strVoertuig As String Dim strGeslacht As String ... If txtGebDat.Text = "" Then lblResultaat.Caption = "U moet eerst uw geboortedatum ingeven!" End If Voer nu de volledige programmacode in voor de voorbeeldoefening. Test het programma, en bewaar het project met als naam vb02.

www.marcgoris.be

41

Programmeren in Visual Basic

Meerdere waarden achter het statement Case In de voorbeelden die je tot hiertoe gezien hebt van een meervoudige selectie, moest er maar een actie gebeuren indien n waarde aan de voorwaarde voldeed. Dat hoeft niet altijd het geval te zijn. Bekijk even de volgende voorbeelden : 1. Case Select strTekens Case 0 To 9 strSoort = Cijfers Case a, e, i, o, u, y strSoort = klinkers Case else StrSoort = medeklinkers End select Case Select bytPunten Case Is < 5 StrCommentaar = U bent niet geslaagd Case Is < 8 StrCommentaar = U bent geslaagd, maar het kon beter Case Is <=10 StrCommentaar = U bent op schitterende wijze geslaagd. End select

2.

Je gebruikt een komma om verschillende waarden achter n uitgang van elkaar te scheiden. Je gebruikt het woord To om een bereik op te geven van een eerste tot en met een laatste waarde. Je gebruikt het woord Is bij het definiren van een waardenbereid met relationele operatoren.

3.6

Oefeningen Oefening 4

Maak het hiernaast afgebeelde formulier na. Het is de bedoeling dat de gebruiker een voor-, hoofden nagerecht selecteert. De computer berekent de totaalprijs en geeft deze weer in een textbox. De gebruiker kan de basisprijzen niet zelf aanpassen, tenzij de check box Basisprijzen aanpassen aangevinkt is. Maak voor de oefening een objectentabel, actietabel en gegevenstabel. Werk de oefening uit in Visual Basic en bewaar het project als Oef04. Oefening 5

Maak een programma om het laadvermogen van een vrachtwagen te berekenen. Een vrachtwagen met 2 assen heeft een MTM (Maximaal Toegelaten Massa) van 19 ton, eentje met drie assen heeft een MTM van 26 ton en eentje met 4 assen heeft een MTM van 32 ton. De gebruiker kan d.m.v. option buttons het aantal assen kiezen. De gebruiker geeft het leeggewicht van de vrachtwagen, en daarna het gewicht van de lading. Op het scherm verschijnt of de vrachtwagen overladen is of niet. Als dat niet het geval is, wordt het gewicht weergegeven dat er eventueel nog bij mag. Ontwerp voor dit programma zelf een formulier. Maak voor de oefening een objectentabel, actietabel en gegevenstabel. Werk de oefening uit in Visual Basic en bewaar het project als Oef05.

42

www.marcgoris.be

Programmeren in Visual Basic

Opdrachten herhalen
Net als in TurboPascal is het ook in Visual Basic mogelijk opdrachten te herhalen. Structuren die dat mogelijk maken, worden iteraties genoemd. Er zijn begrensde iteraties iteraties waarvan het aantal herhalingen begrensd wordt door een absolute waarde en voorwaardelijke iteraties iteraties waarvan het aantal herhalingen afhankelijk is van een voorwaarde. In dit hoofdstuk leren we werken met die herhaalstructuren.

Om het werken met herhaalstructuren duidelijk te maken, gaan we in dit hoofdstuk werken met een programma om maaltafels te maken. De gebruiker geeft daarbij een geheel getal in, en de computer berekent de maaltafels, die in een textbox worden weergegeven. Ontwerp nu eerst het formulier zoals hier afgebeeld is. Gebruik daarbij de volgende objectentabel : Object Type Naam Eigensch. Waarde

Formulier Maaltafels Titel invoer Invoervak Uitvoervak Kader rond opties Optie 1 Optie 2 Optie 3 Knop stoppen

Formulier Label Textbox Textbox Frame

frmMaaltafels lblGetal txtGetal txtResultaat fraActie

Option button optActie1 Option button optActie2 Option button optActie3 Command button cmdStop

Caption Icon Caption Text Font Text Enabled Multiline Caption Caption Value Caption Caption Caption Style Picture

Maaltafels Calc.ico Geef een geheel getal (leeg) 12 ptn, vet (leeg) False True Actie Maaltafels tot getal x 10 True Maaltafels tot product => 50 Maaltafels zolang product =< 50 (leeg) Graphic Trffc14.ico

www.marcgoris.be

43

Programmeren in Visual Basic

Object

Type

Naam

Eigenschap Waarde

Knop leegmaken

Knop Berekenen

Caption Command button cmdLeeg Style Picture Caption Style Command button cmdBerekenen Picture Default

(leeg) Graphic Undo.bmp (leeg) Graphic Calc.ico True

Icoontjes in command buttons Het is mogelijk om in plaats van tekst in een besturingselement een pictogram te plaatsen. Dat is vooral handig als je een programma maakt voor kleine kinderen, of voor anderstaligen. In Visual Basic zijn er een heleboel meegeleverd. Mogelijk staan er zowiezo al een aantal icoontjes in gebruikersmappen. Ze hebben de extensie .ico. Voer in Windows gewoon een zoekopdracht uit op je harde schijf om icoontjes op je harde schijf te vinden. Vind je geen passend icoontje op je harde schijf, dan kan je ze altijd vinden op het internet. Geef in een zoekmachine de zoekopdracht Free icons in, en je krijgt al enkele honderden websites waar je gratis icoontjes kan downloaden. Je kan ook gewone afbeeldingen gebruiken in een command button. Je zou dus in Paint of in Photoshop je eigen pictogrammen kunnen ontwerpen.

Actietabel
Object Gebeurtenis Actie

cmdStop cmdLeeg

Klikken Klikken

End txtGetal en txtResultaat leegmaken optActie1 selecteren

Programmacode
Private Sub cmdStop_Click() 'Het programma afsluiten End End Sub Private Sub cmdLeeg_Click() 'Het scherm weer de beginwaarden geven txtGetal.Text = "" txtResultaat.Text = "" optActie1.Value = True End Sub

44

www.marcgoris.be

Programmeren in Visual Basic

4.1

De begrensde herhaling : For Next

Actietabel
Object Gebeurtenis Actie

cmdBerekenen Klikken

strResultaat leegmaken Selectie keuze True Keuze txtGetal is leeg StrResultaat = U moet eerst een getal ingeven! keuze txtGetal is niet numeriek strResultaat = U mag enkel een getal ingeven! keuze optActie1 is geselcteerd Herhaal intTeller van 1 tot 10 intProduct = iutTeller x Val(txtGetal.Text) strResultaat = strResultaat & Str(intTeller) & x txtGetal.Text & = & Str(intProduct) & regeleinde Einde herhaling Einde Selectie txtResultaat.Text = strResultaat

Gegevenstabel
Gegeven Soort Type Bron Commentaar

strResultaat Var intTeller Var intProduct Var

String Integer Integer

frmMaaltafels private frmMaaltafels - private frmMaaltafels - private

Programmacode
Private Sub cmdBerekenen_Click() 'Declaratie van de variabelen Dim strResultaat As String Dim intTeller As Integer Dim intProduct As Integer 'De resultaatstring vooraf leegmaken strResultaat = "" 'Keuze tussen de drie mogelijke acties met een meervoudige selectie Select Case True Case txtGetal.Text = "" strResultaat = "Vul eerst een getal in!" Case Not (IsNumeric(txtGetal.Text)) strResultaat = "U mag enkel een getal invoeren!"

www.marcgoris.be

45

Programmeren in Visual Basic

Case optActie1.Value For intTeller = 1 To 10 intProduct = intTeller * Val(txtGetal.Text) strResultaat = strResultaat & Str(intTeller) & " x " & txtGetal.Text & " = " & Str(intProduct) & vbCrLf Next intTeller End Select 'De resultaatstring in de textbox plaatsen en deze activeren txtResultaat.Text = strResultaat txtResultaat.Enabled = True End Sub

De syntax van de begrensde herhaling for next For [teller] = [beginwaarde] to [eindwaarde] Opdracht 1 Opdracht 2 Next [teller] De teller is altijd een variabele, meestal (maar niet noodzakelijk) van het type integer. De begin- en eindwaarden zijn eveneens meestal van het type integer en kunnen constanten zijn (zoals in het voorbeeld), maar kunnen net zo goed variabelen zijn. In dat laatste geval is het wel belangrijk dat de begin- en eindwaarde voor de herhaling een numerieke waarde gekregen hebben, zoniet zal het programma vastlopen. De werking is als volgt : wanneer de te herhalen opdrachten een keertje volledig doorlopen werden, gaat de computer na of de teller dezelfde waarde heeft als de eindwaarde. Is dat niet het geval, dan wordt de teller automatisch met n waarde verhoogd, en worden de opdrachten opnieuw uitgevoerd. Wanneer de teller dezelfde waarde bereikt heeft als de eindwaarde, wordt de herhaling gestopt. Een begrensde herhaling wordt in Visual Basic altijd afgesloten met Next [Teller]. De interval van de teller is standaard altijd 1 gehele waarde. Je kan die interval veranderen met de optie step die je gewoon achter de eindwaarde schrijft. Zo krijgt deze werknemer slechts om de 5 jaar een loonsverhoging van 3 % : For intTeller = 1 to Val(txtDienstjaren) Step 5 sngMaandloon = sngMaandloon * 1,03 Je kan de teller ook omkeren (aftellen van 10 naar 1) door van 10 de beginwaarde te maken, en van 1 de eindwaarde, en als interval Step 1 in te geven : For intTeller = 10 To 1 Step -1 intProduct = intTeller * Val(txtGetal.Text) Je kan de herhalingen laten onderbreken met de opdracht Exit For, bijvoorbeeld als het resultaat te groot dreigt te worden : For intTeller = 1 To 10 intProduct = intTeller * Val(txtGetal.Text) If intProduct > 1000 Then Exit For End If Next intTeller

46

www.marcgoris.be

Programmeren in Visual Basic

4.2

De voorwaardelijke herhaling : Do Loop

Actietabel
Object Gebeurtenis Actie

cmdBerekenen Klikken

Selectie keuze True keuze optActie2 is geselecteerd intTeller = 0 Herhaal tot intProduct >= 50 intTeller = intTeller + 1 intProduct = iutTeller x Val(txtGetal.Text) strResultaat = strResultaat & Str(intTeller) & x txtGetal.Text & = & Str(intProduct) & regeleinde Einde herhaling keuze optActie3 is geselecteerd intTeller = 0 Herhaal zolang intProduct <= 50 intTeller = intTeller + 1 intProduct = iutTeller x Val(txtGetal.Text) strResultaat = strResultaat & Str(intTeller) & x txtGetal.Text & = & Str(intProduct) & regeleinde Einde herhaling Einde Selectie

Programmacode
Private Sub cmdBerekenen_Click() ... Select Case True ... Case optActie2.Value intTeller = 0 Do Until intProduct >= 50 intTeller = intTeller + 1 intProduct = intTeller * Val(txtGetal.Text) strResultaat = strResultaat & Str(intTeller) & " = " & Loop Case optActie3.Value intTeller = 0 Do While intProduct <= 50 intTeller = intTeller + 1 intProduct = intTeller * Val(txtGetal.Text) strResultaat = strResultaat & Str(intTeller) & " = " & Loop

& " x " & txtGetal.Text Str(intProduct) & vbCrLf

& " x " & txtGetal.Text Str(intProduct) & vbCrLf

www.marcgoris.be

47

Programmeren in Visual Basic

De syntax van de voorwaardelijke herhaling do loop Do while Loop Do while [voorwaarde] Opdracht 1 Opdracht 2 Loop Herhaal de opdracht zolang aan een voorwaarde wordt voldaan. Do until Loop Do until [voorwaarde] Opdracht 1 Opdracht 2 Loop Herhaal de opdrachten tot aan een voorwaarde wordt voldaan.

De while- en de until-herhalingen hebben exact hetzelfde effect als je de voorwaarde gewoon omdraait. Een voorwaardelijke herhaling wordt in Visual Basic altijd afgesloten met Loop. Het is belangrijk eraan te denken dat je ervoor zorgt dat je de voorwaarde zo formuleert dat ze zeker kan bereikt worden. Zoniet kom je in een eindeloze lus terecht, die ervoor kan zorgen dat Visual Basic vastloopt tijdens het uittesten, en je al je werk verliest. Het is zowiezo niet onverstandig om het project eerst te bewaren voor je het uittest. Het is mogelijk om de voorwaarden te toetsen aan het einde van de herhaling :
Do intTeller = intTeller + 1 intProduct = intTeller * Val(txtGetal.Text) strResultaat = strResultaat & Str(intTeller) & " x " & txtGetal.Text & " = " & Str(intProduct) & vbCrLf Loop Until intProduct >= 50

Je kan de herhalingen laten onderbreken met de opdracht Exit Do :


Do intTeller = intTeller + 1 If intTeller > 20 Then Exit Do EndIf intProduct = intTeller * Val(txtGetal.Text) strResultaat = strResultaat & Str(intTeller) & " x " & txtGetal.Text & " = " & Str(intProduct) & vbCrLf Loop Until intProduct >= 50

Een alternatief voor Do while Loop-herhaling is de herhaling while wend. Deze structuur werd nog behouden uit vorige versies, maar biedt geen enkel voordeel tegenover de Do while-herhaling. Ze werd in deze cursus opgenomen voor de volledigheid, maar je gebruikt ze best niet meer.
While intProduct <= 50 intTeller = intTeller + 1 intProduct = intTeller * Val(txtGetal.Text) strResultaat = strResultaat & Str(intTeller) & " x " & txtGetal.Text & " = " & Str(intProduct) & vbCrLf Wend

Werk nu het voorbeeld verder uit in Visual Basic, en bewaar het project met als naam Vb03.

48

www.marcgoris.be

Programmeren in Visual Basic

4.3

Oefeningen

Oefening 6

Maak een programma om het zakgeld te berekenen. We spreken af dat een kind pas voor de eerste keer zakgeld krijgt als het 5 jaar oud is. Er bestaan 3 systemen om het zakgeld te verhogen : een jaarlijkse verhoging met 50 %, een jaarlijkse verhoging met 5,00 of een driejaarlijkse verdubbeling van het zakgeld. De gebruiker geeft in hoeveel zakgeld het kind kreeg toen het 5 jaar oud was, hoe oud het kind nu is en maakt een keuze uit een van de drie verhogingssystemen. Wanneer de gebruiker een leeftijd kleiner dan 5 jaar ingeeft, verschijnt de boodschap : Dit kind is te jong voor zakgeld. Wanneer de gebruiker een leeftijd ouder dan 21 ingeeft, verschijnt de boodschap : Deze persoon is te oud voor Mzakgeld. Wanneer de gebruiker een alfanumeriek gegeven invoert, verschijnt de boodschap : U moet een getal invoeren als leeftijd! In de andere gevallen verschijnt in een nieuwe textbox een lijstje met de bedragen van het zakgeld voor de elke leeftijd tussen het 5 levensjaar en de huidige leeftijd. Het zakgeld voor de huidige leeftijd is de laatste in het rijtje. Maak voor de oefening een objectentabel, actietabel en gegevenstabel. Ontwerp in Visual Basic het formulier dat bij deze opdracht staat afgebeeld. Schrijf achter de drie command buttons de correcte programmacode, en bewaar de oefening met als naam Oef06.

Oefening 7

Maak een programma om het gemiddelde gewicht van een groep personen te berekenen. De gebruiker geeft in twee verschillende textboxen de naam en het gewicht van een persoon in. Op het formulier bevinden zich vier command buttons : Afsluiten, Leegmaken, Volgende en Eindigen. Wanneer de gebruiker op de knop Volgende klikt, worden de twee textboxes leeggemaakt, en kan de gebruiker een nieuwe naam en een nieuw gewicht ingeven. Wanneer de gebruiker op de knop Eindigen klikt, verschijnt in een derde textbox het gemiddelde gewicht van alle ingegeven personen. Bovendien wordt de lijst van namen en gewichten van alle ingegeven personen getoond in het Immediate Window. Ontwerp voor dit programma zelf een formulier. Maak voor de oefening een objectentabel, actietabel en gegevenstabel. Werk de oefening uit in Visual Basic en bewaar het project als Oef07.

www.marcgoris.be

49

Programmeren in Visual Basic

Nog meer besturingselementen


In dit hoofstuk leren we werken met een aantal nieuwe besturingselementen werken. Daarvoor maken we een nieuw project in Visual Basic aan met een formuliertje dat er uit ziet zoals het voorbeeld dat hier is afgebeeld. Dit formuliertje wordt de basis voor een eenvoudig vertaalspelletje, waarbij de gebruiker kan kiezen in welke richting hij/zij wil vertalen, en kan dan kiezen tussen Duits, Engels en Frans. Wanneer de gebruiker het spel wil beginnen, moet hij via een inputbox 5 keer een woord vertalen. De computer gaat na of het antwoord van de gebruiker correct is. Na het vijfde woord is het spel ten einde en krijgt de gebruiker via een messagebox de score te zien. Bovendien wordt die score eveneens getoond in op een schaal van 1 tot 5, gevormd door een horizontale schuifbalk op het formulier.

Ontwerp nu op basis van de onderstaande objectentabel het formulier met de labels, de command buttons en het pijltje : Object Type Naam Eigensch. Waarde

Formulier Vertaalspel Vertaalrichting Taalkeuze Knop Afsluiten Knop Begin

Formulier Label Label Command button

frmVertaalspel lblRichting lblTaal cmdAfsluiten

Command button cmdBegin lblScore imgPijl

Schaalaanduiding Label Pijltje tussen vormen Image


5.1 Lijnen

Caption Caption Caption Caption Caption Default Caption Picture

Vertaalspel Vertaalrichting Taalkeuze &Afsluiten &Begin spel True 1 2 3 4 5 Arw07rt.ico

Klik op het icoontje voor het besturingselement Lijn in de toolbox, en teken op ongeveer dezelfde plaats als in het voorbeeld bovenaan deze bladzijde een horizontale lijn in het formulier.

BorderColor

BorderStyle

BorderWidth

DrawMode

50

www.marcgoris.be

Programmeren in Visual Basic

X1, Y1

X2, Y2

Object

Type

Naam

Eigensch.

Waarde

Horizontale lijn
5.2 Vormen

Line

linLijn

Klik op het icoontje voor het besturingselement Shape in de toolbox, en teken de eerste rechthoek onderaan links op het scherm.

BackColor

BackStyle

FillColor

FillStyle

Shape

Object

Type

Naam

Eigensch.

Waarde

Grote rechthoek

Shape

shpRechthoek1

Eerste ovaal

Shape

shpOvaal1

Shape FillColor FillStyle Shape FillColor FillStyle

Rectangle Zwart Solid Ovaal Grijs Solid

www.marcgoris.be

51

Programmeren in Visual Basic

Object

Type

Naam

Eigensch.

Waarde

Kleine rechthoek Tweede ovaal


5.3 Listbox

Shape Shape

shpRechthoek2 shpOvaal2

Shape FillColor FillStyle Shape FillColor

Rectangle Zwart Solid Ovaal Grijs

Een Listbox is een besturingselement waarin je zelf een aantal mogelijkheden kan voorzien, waaruit gebruikers een keuze kunnen maken. Klik op het icoontje voor het besturingselement Listbox in de toolbox, en teken het vakje voor de listbox vlak onder het eerste label.

Columns

IntegralHeight

ItemData

List

MultiSelect

Sorted

Style

Listboxen worden vaak gebruikt ter vervanging van option buttons, zeker wanneer er veel keuzemogelijkheden zijn, en wanneer de programmeur de mogelijkheid wil behouden een item toe te laten voegen aan de lijst van keuzemogelijkheden.

52

www.marcgoris.be

Programmeren in Visual Basic

Items toevoegen in een listbox Tijdens de ontwerpfase ga je als volgt te werk : Klik in het lege veld achter de eigenschap List. Klik op het selectiepijltje dat verschijnt. Er verschijnt een leeg vakje, waarin de cursor staat te knipperen. Typ nu het eerste item van de lijst in : Van Nederlands. Om een nieuw item toe te voegen, gebruik je de toetsencombinatie Ctrl + Enter. Typ dan het tweede item van de lijst in : Naar Nederlands.

Je kan ook items aan de lijst toevoegen in de loop van de uitvoering van het programma. Dat moet je dan wel in de programmacode voorzien. Een voorbeeld : de gebruiker kan in een textbox txtItem een item ingeven dat door het klikken op de knop cmdToevoegen wordt bijgevoegd in de lijst lstLijst : Private Sub cmdToevoegen_Click() LstLijst.AddItem (txtItem.Text As String) TxtItem.Text = End Sub

5.4

Combobox

Een Combobox lijkt erg op een listbox, en de mogelijkheden zijn gelijkaardig. Toch zijn er enkele opvallende verschillen. Klik op het icoontje voor het besturingselement Combobox in de toolbox, en teken het vakje voor de combobox vlak onder het tweede label, naast de listbox.

Style

Text

Verschillen tussen listbox en Combobox . . . . . . .

www.marcgoris.be

53

Programmeren in Visual Basic

Voeg nu op het formuliertje de listbox en de combobox toe, volgens de eigenschappen in deze objectentabel :

Objectentabel
Object Type Naam Eigensch. Waarde

Vertaalrichting

Listbox

lstRichting

List List Sorted

Taalkeuze

Combobox

cboTaal

Van Nederlands Naar Nederlands Duits Engels Frans True

5.5

Schuifbalken

Schuifbalken (Engels : scrollbars) zijn besturingselementen waarmee de plaats van een waarde in een bereik kan worden ingegeven of weergegeven. Dat kan zowel met horizontale als met verticale schuifbalken. Klik in de toolbox op het icoontje van de horizontale schuifbalk, en teken een schuifbalk onder het derde label. Zorg er daarna voor dat de waarden van 1 tot 5 in het label net boven de schuifbalk gelijkmatig gespreid zijn over de lengte van de schuifbalk zoals in het voorbeeld op blz. 50. LargeChange

SmallChange

Max

Min

Object

Type

Naam

Eigensch.

Waarde

Schuifbalk

Hor. Schuifbalk

hsbScore

Max Visible

5 False

Zorg dat ook het label lblScore onzichtbaar gemaakt wordt.

54

www.marcgoris.be

Programmeren in Visual Basic

5.6

InputBox

Een InputBox is geen besturingselement dat je terugvindt in de toolbox, maar een schermpje dat je met de functie InputBox oproept om de gebruiker de mogelijkheid te geven een tekstwaarde in te geven. Het resultaat van de functie is een String.

Syntax van de InputBox-functie strResultaat = InputBox (Prompt, Titel, Default, xpos, ypos) Prompt : De string die boven het invoervak in de InputBox staat, meestal met de opdracht voor invoer erin. De maximale lengte van die string is 1024 karakters, en je kan in de string gebruikmaken van de Visual Basic-constante vbCrLf. Titel : De string die de titel vormt in de titelbalk van de InputBox. Default : Een string die bij het openen van de InputBox als standaard-invoer in het invoervak staat, maar die de gebruiker uiteraard kan wissen en wijzigen door een eigen invoerstring. xpos : De afstand tussen de linkerkant van het scherm en de rechterrand van de InputBox, uitgedrukt in twips. ypos : De afstand tussen de bovenkant van het scherm en de bovenrand van de InputBox, uitgedrukt in twips.

Enkel het eerste argument van de InputBox-functie is verplicht, alle andere zijn optioneel. Een voorbeeld :
Private Sub cmdBegin_Click() Const strTitel1 = Geef het Duitse woord voor : Const strNld1 = boter Const strDefault = < Geef hier het woord in > Dim strAntw1 As String StrAntw1 = InputBox(strTitel1 & strNld1, Woord 1, strDefault, 5000, 3000) End Sub

Als je alle optionele argumenten weglaat, ziet de InputBox-functie er zo uit :


StrAntw1 = InputBox(strTitel1 & strNld1)

In dat geval is het invoervak gewoon leeg als de InputBox getoond wordt. In de titelbalk van de InputBox staat dan de naam van het project, en de InputBox staat in de linkerbovenhoek van het scherm. Wil je slechts n optioneel argument weglaten, dan plaats je gewoon twee kommas achter elkaar :
StrAntw1 = InputBox(strTitel1 & strNld1, Woord 1, , 5000, 3000)

www.marcgoris.be

55

Programmeren in Visual Basic

Actietabel
Object Gebeurtenis Actie

cmdAfsluiten Klikken CmdBegin Klikken

End bytScore = 0 Als lstRichting = Van Nederlands dan Selectie keuze cboTaal Keuze Duits strAntw1 = InputBox(strTitel1 & strNld1, Woord 1) Als strAntw1 = strDuits1 dan bytScore = bytScore + 1 strAntw2 = InputBox(strTitel1 & strNld2, Woord 2) Als strAntw2 = strDuits2 dan bytScore = bytScore + 1 strAntw3 = InputBox(strTitel1 & strNld3, Woord 3) Als strAntw3 = strDuits3 dan bytScore = bytScore + 1 strAntw4 = InputBox(strTitel1 & strNld4, Woord 4) Als strAntw4 = strDuits4 dan bytScore = bytScore + 1 strAntw5 = InputBox(strTitel1 & strNld5, Woord 5) Als strAntw5 = strDuits5 dan bytScore = bytScore + 1 Keuze Engels strAntw1 = InputBox(strTitel2 & strNld1, Woord 1) Als strAntw1 = strEng1 dan bytScore = bytScore + 1 strAntw2 = InputBox(strTitel2 & strNld2, Woord 2) Als strAntw2 = strEng2 dan bytScore = bytScore + 1 strAntw3 = InputBox(strTitel2 & strNld3, Woord 3) Als strAntw3 = strEng3 dan bytScore = bytScore + 1 strAntw4 = InputBox(strTitel2 & strNld4, Woord 4) Als strAntw4 = strEng4 dan bytScore = bytScore + 1 strAntw5 = InputBox(strTitel2 & strNld5, Woord 5) Als strAntw5 = strEng5 dan bytScore = bytScore + 1 Keuze Engels strAntw1 = InputBox(strTitel3 & strNld1, Woord 1) Als strAntw1 = strFr1 dan bytScore = bytScore + 1 strAntw2 = InputBox(strTitel3 & strNld2, Woord 2) Als strAntw2 = strFr2 dan bytScore = bytScore + 1 strAntw3 = InputBox(strTitel3 & strNld3, Woord 3) Als strAntw3 = strFr3 dan bytScore = bytScore + 1 strAntw4 = InputBox(strTitel3 & strNld4, Woord 4) Als strAntw4 = strFr4 dan bytScore = bytScore + 1 strAntw5 = InputBox(strTitel3 & strNld5, Woord 5) Als strAntw5 = strFr5 dan bytScore = bytScore + 1 Einde selectie

56

www.marcgoris.be

Programmeren in Visual Basic

Object

Gebeurtenis

Actie

CmdBegin

Klikken

Zoniet Selectie keuze cboTaal Keuze Duits strAntw1 = InputBox(strTitel4 & strDuits1, Woord 1) Als strAntw1 = strNld1 dan bytScore = bytScore + 1 strAntw2 = InputBox(strTitel4 & strDuits2, Woord 2) Als strAntw2 = strNld2 dan bytScore = bytScore + 1 strAntw3 = InputBox(strTitel4 & strDuits3, Woord 3) Als strAntw3 = strNld3 dan bytScore = bytScore + 1 strAntw4 = InputBox(strTitel4 & strDuits4, Woord 4) Als strAntw4 = strNld4 dan bytScore = bytScore + 1 strAntw5 = InputBox(strTitel4 & strDuits5, Woord 5) Als strAntw5 = strNld5 dan bytScore = bytScore + 1 Keuze Engels strAntw1 = InputBox(strTitel4 & strEng1, Woord 1) Als strAntw1 = strNld1 dan bytScore = bytScore + 1 strAntw2 = InputBox(strTitel4 & strEng2, Woord 2) Als strAntw2 = strNld2 dan bytScore = bytScore + 1 strAntw3 = InputBox(strTitel4 & strEng3, Woord 3) Als strAntw3 = strNld3 dan bytScore = bytScore + 1 strAntw4 = InputBox(strTitel4 & strEng4, Woord 4) Als strAntw4 = strNld4 dan bytScore = bytScore + 1 strAntw5 = InputBox(strTitel4 & strEng5, Woord 5) Als strAntw5 = strNld5 dan bytScore = bytScore + 1 Keuze Engels strAntw1 = InputBox(strTitel4 & strFr1, Woord 1) Als strAntw1 = strNld1 dan bytScore = bytScore + 1 strAntw2 = InputBox(strTitel4 & strFr2, Woord 2) Als strAntw2 = strNld2 dan bytScore = bytScore + 1 strAntw3 = InputBox(strTitel4 & strFr3, Woord 3) Als strAntw3 = strNld3 dan bytScore = bytScore + 1 strAntw4 = InputBox(strTitel4 & strFr4, Woord 4) Als strAntw4 = strNld4 dan bytScore = bytScore + 1 strAntw5 = InputBox(strTitel4 & strFr5, Woord 5) Als strAntw5 = strNld5 dan bytScore = bytScore + 1 Einde selectie Einde Als hsbScore.Value = bytScore hsbScore en lblScore zichtbaar maken

www.marcgoris.be

57

Programmeren in Visual Basic

Gegevenstabel
Gegeven Soort Type Bron Commentaar

strDuits1 strEng1 strFr1 strNld1 strDuits2 strEng2 strFr2 strNld2 strDuits3 strEng3 strFr3 strNld3 strDuits4 strEng4 strFr4 strNld4 strDuits5 strEng5 strFr5 strNld5 strTitel1 strTitel2 strTitel3 strTitel4 strDefault strAntw1 strAntw2 strAntw3 strAntw4 strAntw5 bytScore

Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Var Var Var Var Var Var

String String String String String String String String String String String String String String String String String String String String String String String String String String String String String String Byte

frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private frmVertaalspel - private

Butter butter beurre boter Bier beer bire bier Salz salt sel zout Gefahr danger danger gevaar Tochter daughter fille dochter Geef het Duitse woord voor : Geef het Engelse woord voor : Geef het Franse woord voor : Geef het Nederlandse woord voor : < Geef hier het woord in >

58

www.marcgoris.be

Programmeren in Visual Basic

Programmacode
Option Explicit Private Sub cmdAfsluiten_Click() 'Het afsluiten van het programma End End Sub Private Sub cmdBegin_Click() 'Declaratie van de constanten, dwz de woorden die moeten vertaald worden Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const Const strDuits1 = "Butter" strEng1 = "butter" strFr1 = "beurre" strNld1 = "boter" strDuits2 = "Bier" strEng2 = "beer" strFr2 = "bire" strNld2 = "bier" strDuits3 = "Salz" strEng3 = "salt" strFr3 = "sel" strNld3 = "zout" strDuits4 = "Gefahr" strEng4 = "danger" strFr4 = "danger" strNld4 = "gevaar" strDuits5 = "Tochter" strEng5 = "daughter" strFr5 = "fille" strNld5 = "dochter" strTitel1 strTitel2 strTitel3 strTitel4 = = = = "Geef "Geef "Geef "Geef het het het het Duitse woord voor : " Engelse woord voor : " Franse woord voor : " Nederlandse woord voor : "

Const strDefault = "< Geef hier het woord in >" 'Declaratie van de variabelen Dim strAntw1, strAntw2, strAntw3, strAntw4, strAntw5 As String Dim bytScore As Byte 'Eerst wordt de score op 0 gezet bytScore = 0

www.marcgoris.be

59

Programmeren in Visual Basic

'De selectiestructuur voor het ingeven van de antwoorden If lstRichting = "Van Nederlands" Then Select Case cboTaal Case "Duits" strAntw1 = InputBox(strTitel1 & strNld1, "Woord 1") If strAntw1 = strDuits1 Then bytScore = bytScore + 1 strAntw2 = InputBox(strTitel1 & strNld2, "Woord 2") If strAntw2 = strDuits2 Then bytScore = bytScore + 1 strAntw3 = InputBox(strTitel1 & strNld3, "Woord 3") If strAntw3 = strDuits3 Then bytScore = bytScore + 1 strAntw4 = InputBox(strTitel1 & strNld4, "Woord 4") If strAntw4 = strDuits4 Then bytScore = bytScore + 1 strAntw5 = InputBox(strTitel1 & strNld5, "Woord 5") If strAntw5 = strDuits5 Then bytScore = bytScore + 1 Case "Engels" strAntw1 = InputBox(strTitel2 & strNld1, "Woord 1") If strAntw1 = strEng1 Then bytScore = bytScore + 1 strAntw2 = InputBox(strTitel2 & strNld2, "Woord 2") If strAntw2 = strEng2 Then bytScore = bytScore + 1 strAntw3 = InputBox(strTitel2 & strNld3, "Woord 3") If strAntw3 = strEng3 Then bytScore = bytScore + 1 strAntw4 = InputBox(strTitel2 & strNld4, "Woord 4") If strAntw4 = strEng4 Then bytScore = bytScore + 1 strAntw5 = InputBox(strTitel2 & strNld5, "Woord 5") If strAntw5 = strEng5 Then bytScore = bytScore + 1 Case "Frans" strAntw1 = InputBox(strTitel3 & strNld1, "Woord 1") If strAntw1 = strFr1 Then bytScore = bytScore + 1 strAntw2 = InputBox(strTitel3 & strNld2, "Woord 2") If strAntw2 = strFr2 Then bytScore = bytScore + 1 strAntw3 = InputBox(strTitel3 & strNld3, "Woord 3") If strAntw3 = strFr3 Then bytScore = bytScore + 1 strAntw4 = InputBox(strTitel3 & strNld4, "Woord 4") If strAntw4 = strFr4 Then bytScore = bytScore + 1 strAntw5 = InputBox(strTitel3 & strNld5, "Woord 5") If strAntw5 = strFr5 Then bytScore = bytScore + 1 End Select

60

www.marcgoris.be

Programmeren in Visual Basic

Else Select Case cboTaal Case "Duits" strAntw1 = InputBox(strTitel4 & strDuits1, "Woord 1") If strAntw1 = strNld1 Then bytScore = bytScore + 1 strAntw2 = InputBox(strTitel4 & strDuits2, "Woord 2") If strAntw2 = strNld2 Then bytScore = bytScore + 1 strAntw3 = InputBox(strTitel4 & strDuits3, "Woord 3") If strAntw3 = strNld3 Then bytScore = bytScore + 1 strAntw4 = InputBox(strTitel4 & strDuits4, "Woord 4") If strAntw4 = strNld4 Then bytScore = bytScore + 1 strAntw5 = InputBox(strTitel4 & strDuits5, "Woord 5") If strAntw5 = strNld5 Then bytScore = bytScore + 1 Case "Engels" strAntw1 = InputBox(strTitel4 & strEng1, "Woord 1") If strAntw1 = strNld1 Then bytScore = bytScore + 1 strAntw2 = InputBox(strTitel4 & strEng2, "Woord 2") If strAntw2 = strNld2 Then bytScore = bytScore + 1 strAntw3 = InputBox(strTitel4 & strEng3, "Woord 3") If strAntw3 = strNld3 Then bytScore = bytScore + 1 strAntw4 = InputBox(strTitel4 & strEng4, "Woord 4") If strAntw4 = strNld4 Then bytScore = bytScore + 1 strAntw5 = InputBox(strTitel4 & strEng5, "Woord 5") If strAntw5 = strNld5 Then bytScore = bytScore + 1 Case "Frans" strAntw1 = InputBox(strTitel4 & strFr1, "Woord 1") If strAntw1 = strNld1 Then bytScore = bytScore + 1 strAntw2 = InputBox(strTitel4 & strFr2, "Woord 2") If strAntw2 = strNld2 Then bytScore = bytScore + 1 strAntw3 = InputBox(strTitel4 & strFr3, "Woord 3") If strAntw3 = strNld3 Then bytScore = bytScore + 1 strAntw4 = InputBox(strTitel4 & strFr4, "Woord 4") If strAntw4 = strNld4 Then bytScore = bytScore + 1 strAntw5 = InputBox(strTitel4 & strFr5, "Woord 5") If strAntw5 = strNld5 Then bytScore = bytScore + 1 End Select End If

www.marcgoris.be

61

Programmeren in Visual Basic

'De score weergeven op de schuifbalk en deze zichtbaar maken hsbScore.Value = bytScore hsbScore.Visible = True lblScore.Visible = True End Sub 5.7 MessageBox

Een MessageBox is net als de InputBox geen besturingselement dat je terugvindt in de toolbox, maar wel een schermpje dat je met de functie MsgBox oproept om een boodschap aan de gebruiker te geven. In Windows-omgevingen wordt deze functie vaak gebruikt om foutboodschappen op het scherm te zetten of de gebruiker belangrijke informatie te geven over een functie. Syntax van de MessageBox-functie intResultaat MsgBox (Prompt, Layout, Titel) Prompt : De string die de boodschap aan de gebruiker bevat. De maximale lengte van die string is 1024 karakters, en je kan in de string gebruikmaken van de Visual Basic-constante vbCrLf. Layout : Je kan de layout van de MessageBox aan je behoeften aanpassen. Dat kan met de naam van de Visual Basic-constante, of met de overeenkomstige waarde :

vbOKOnly (0)

vbOKCancel (1)

vbAbortRetryIgnore (2)

vbYesNo (4)

vbRetryCancel (5)

vbYesNoCancel (3)

vbCritical (16)

vbQuestion (32)

vbExclamation (48)

vbInformation (64)

62

www.marcgoris.be

Programmeren in Visual Basic

Je kan gebruik maken van zowel de Visual Basic-constante als van de waarde. Het resultaat is hetzelfde : IntResultaat = MsgBox("Dit is de boodschap", vbCritical,"Titel") IntResultaat = MsgBox("Dit is de boodschap", 16, "Titel") Het is eveneens mogelijk om twee soorten MessageBoxen te combineren, bijvoorbeeld een MessageBox met een Informatie-teken (64) en de knoppen Ja en Neen (4) : 64 + 4 = 68. De syntax is dan zo : IntResultaat = MsgBox("Dit is de boodschap", 68, "Titel") Andere waarden die je kan gebruiken om de layout of het effect van de MessageBox te benvloeden zijn : 256 512 4096 16384 65536 524288 De tweede knop in de MessageBox is de standaardwaarde. De derde knop in de MessageBox is de standaardwaarde. De gebruiker moet reageren op de MessageBox alvorens verder te kunnen werken met eender welke computertoepassing. Er wordt een Help-knop toegevoegd. Over het aanmaken van Hulpbestanden leer je meer in het laatste hoofdstuk. De MessageBox blijft steeds op de voorgrond staan, ook als er een andere toepassing wordt geopend. De tekst wordt rechts uitgelijnd in de MessageBox.

Ook die waarden kan je uiteraard weer samentellen met de waarden van de afgebeelde MessageBoxen op de vorige bladzijde. Opmerking : de taal van de knoppen op een MessageBox is afhankelijk van de taalinstellingen van de computer, en niet van de Visual Basic-versie. Titel : De string die in de titelbalk van de MessageBox verschijnt. Enkel het eerste argument is verplicht, de twee andere zijn optioneel, en mogen dus weggelaten worden. Als je ze weglaat, zal de MessageBox het uitzicht hebben van de MessageBox vbOKOnly en verschijnt de naam van het project in de titelbalk. Het resultaat van de functie MsgBox is van het type integer, waarbij de waarde van dat resultaat de volgende betekenis heeft : vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo (1) (2) (3) (4) (5) (6) (7) De gebruiker heeft op de knop OK geklikt. De gebruiker heeft op de knop Annuleren geklikt. De gebruiker heeft op de knop Afbreken geklikt. De gebruiker heeft op de knop Nogmaals geklikt. De gebruiker heeft op de knop Negeren geklikt. De gebruiker heeft op de knop Ja geklikt. De gebruiker heeft op de knop Neen geklikt.

Met behulp van deze lijst, kan je het programma gepast laten reageren op de gebruiker : intResultaat = MsgBox("Wil je stoppen? If intResultaat = 1 Then End Sub ...

", 36, "Doorgaan?")

In vele gevallen echter is het resultaat verder van geen belang, omdat er maar n knop in de MessageBox staat, of omdat er geen verschillende acties bij een verschillende reacties verwacht worden.

www.marcgoris.be

63

Programmeren in Visual Basic

We voegen nu in ons voorbeeldformulier drie MessageBoxen in : Eentje om ervoor te zorgen dat de foutboodschap U moet eerst een vertaalrichting kiezen! verschijnt wanneer de gebruiker geen vertaalrichting heeft gekozen in de ListBox.

Eentje om ervoor te zorgen dat de foutboodschap U heeft geen geldige taal gekozen! wanneer de gebruiker in de ComboBox geen taal heeft gekozen of zelf een andere taal heeft ingevoerd.

Eentje waarin de score van de gebruiker wordt getoond wanneer de vijf woorden werden ingegeven.

Actietabel
Object Gebeurtenis Actie

cmdBegin

Klikken

bytScore = 0 Als lstRichting is leeg dan intToon = MsgBox(U moet eerst een vertaalrichting kiezen, 16, Invoerfout) Als lstRichting = Van Nederlands dan Als strAntw5 = strFr5 dan bytScore = bytScore + 1 Keuze zoniet intToon = MsgBox(U heeft geen geldige taal gekozen, 16, Invoerfout) Einde Selectiekeuze Als strAntw5 = strNdl5 dan bytScore = bytScore + 1 Keuze zoniet intToon = MsgBox(U heeft geen geldige taal gekozen, 16, Invoerfout) Einde Selectiekeuze lblScore.Vsivble = True intToon = MsgBox(Uw score bedraagt & Str(bytScore) & / 5, 16,Invoerfout) End Sub

64

www.marcgoris.be

Programmeren in Visual Basic

Gegevenstabel
Gegeven Soort Type Bron Commentaar

intToon

Var

Integer

frmVertaalspel - private

Programmacode
... Dim intToon As Integer ... If lstRichting = "" Then intToon = MsgBox("U moet eerst een vertaalrichting kiezen!", 16, "Invoerfout") End If ... Case Else IntToon = MsgBox("U heeft geen geldige taal gekozen! ", 16,"Invoerfout") ... intToon = MsgBox("Uw score bedraagt " & Str(byScore) & "/5", 64, "Uw score") ... Werk het voorbeeld af in Visual Basic en bewaar het project met als naam Vb04. 5.8 Oefening Oefening 8

Maak een programma waarbij de gebruiker de mogelijkheid krijgt om bij een jaartal uit de geschiedenis (van het begin van onze jaarrekening) een persoonlijke notitie van maximaal 30 karakters te schrijven. Ontwerp daarvoor het volgende formulier, waarop de volgende besturingselementen staan : een verticale schuifbalk, een textbox met het jaartal in, een lege listbox en drie command buttons (stoppen, leegmaken, schrijven). Wanneer de gebruiker de waarde van de schuifbalk wijzigt, verschijnt het jaartal in de textbox. Wanneer de gebruiker op de knop schrijven klikt, verschijnt een InputBox waarin de gebruiker voor dat bewuste jaartal een notitie kan ingeven. Wanneer de notitie langer is dan 30 karakters, verschijnt een MessageBox met de boodschap dat de notitie maximaal 30 karakters lang mag zijn, en wordt de notitie niet behouden. Uiteindelijk wordt het jaartal met de notitie toegevoegd aan de listbox. Maak voor de oefening een objectentabel, actietabel en gegevenstabel. Ontwerp in Visual Basic het formulier dat bij deze opdracht staat afgebeeld. Schrijf achter de drie command buttons de correcte programmacode, en bewaar de oefening met als naam Oef08.

www.marcgoris.be

65

Programmeren in Visual Basic

Werken met menus

In Windows-programmas is het heel gewoon om te werken met menus, waarin de gebruiker een aantal mogelijkheden vindt om bepaalde acties in het programma te ondernemen. In dit hoofstuk leren we een hele menustructuur opzetten, en aan de verschillende menukeuzes een actie verbinden.

We maken een programma waarbij een gebruiker een willekeurig getal kan raden. Via het menu Instellingen kan de gebruiker de achtergrondkleur van het scherm instellen en het bereik opgeven voor het willekeurig getal. Bij elke raadbeurt toont de computer of het getal te hoog of te laag werd geraden. Wanneer het getal goed werd geraden, verschijnt in een MessageBox het aantal raadbeurten die nodig waren om het getal te raden. Ontwerp voor dit programma eerst een formuliertje zoals hiernaast afgebeeld. Trek je van het menu voorlopig nog niets aan; dat leren we zodadelijk nog maken.

Objectentabel
Object Type Naam Eigensch. Waarde

Formulier Raadspel Formulier Invoeropdracht Label Invoervakje Textbox Knop Afsluiten Knop Nieuw spel Knop Raden Resultaat

frmRaadspel lblRaden txtGok

Command button cmdAfsluiten Command button cmdNieuw Command button cmdRaden Label lblResultaat

Caption Caption Text Visible Caption Caption Default Caption Enabled Caption Font

Raadspel (Leeg) (Leeg) False &Afsluiten &Nieuw spel True &Raden False (Leeg) 12 punten, vet

66

www.marcgoris.be

Programmeren in Visual Basic

6.1

Menus invoegen met de Menu Editor

Met de Menu Editor kan je de hele menustructuur ontwerpen en vorm geven. Je roept de editor op via het menu Tools.

Caption

Name

Naamgeving binnen een menu Het is een gewoonte om in de naam van een element uit een menu ook de naam van het bovenliggend menu te noteren. De optie Afsluiten in het menu Bestand heet dus mnuBestandAfsluiten. In het voorbeeld op de vorige bladzijde heeft de mogelijkheid Tot 10 de naam mnuInstellingenBereikTot10.

Shortcut

Opgelet : sommige shortcuts worden in Windows universeel gebruikt. Het best gebruik je ze ook enkel voor die universele functies, zodat je verwarring uitsluit. Enkele voorbeelden: F1 Ctrl + F4 Ctrl + P Help Venster sluiten binnen een toepassing Afdrukken

Voor zgn. top-level menu-items (dat zijn de zichtbare menutitels bovenaan een formulier, zoals in ons voorbeeld Bestand, Beeld, Instellingen en Info) kan je geen shortcut instellen.

www.marcgoris.be

67

Programmeren in Visual Basic

Checked

Enabled

Visible

Scheidingslijnen in menus Vaak worden in menus verschillende opdrachten van eenzelfde soort gegroepeerd door ze met een scheidingslijn van de andere opdrachten te scheiden. Zon scheidingslijn maak je door in het invoervak Caption van de Menu Editor een liggend streepje te typen. Je geeft de streep best wel een naam, maar het is natuurlijk niet de bedoeling dat er een actie geprogrammeerd wordt als de gebruiker op de lijn klikt. Het is de gewoonte dat elk menu-item in een objectentabel wordt gezet. Maak nu op basis van de volgende objectentabel de menustructuur aan :

Objectentabel
Object Type Naam Eigensch. Waarde

Menu Bestand - Menu Afsluiten Menu Instellingen - Menu Grijs

Menu Menu Menu Menu

mnuBestand mnuBestandAfsluiten mnuInstellingen mnuInstellingenGrijs

Caption Caption Shortcut Enabled Caption Caption Sortcut Checked

&Bestand &Afsluiten Ctrl + F4 False &Instellingen G&rijs F2 True

68

www.marcgoris.be

Programmeren in Visual Basic

Object

Type

Naam

Eigensch.

Waarde

- Menu Geel - Menu Groen - Menu Bereik --Menu Tot 10 --Menu Tot 100 --Menu Tot 1000 Menu Info Menu Programma Menu Auteur
6.2

Menu Menu Menu Menu Menu Menu Menu Menu Menu

mnuInstellingenGeel mnuInstellingenGroen mnuInstellingenBereik mnuInstellingenBereikTot10 mnuInstellingenBereikTot100 mnuInstellingenBereikTot1000 mnuInfo mnuInfoProgramma mnuInfoAuteur

Caption Sortcut Caption Sortcut Caption Caption Checked Shortcut Caption Shortcut Caption Shortcut Caption Caption Shortcut Caption Shortcut

&Geel F3 Groe&n F4 &Bereik Tot 10 True F6 Tot 100 F7 Tot 1000 F8 &Info &Programma F5 &Auteur F6

De programmacode achter het menu Afsluiten

De optie Afsluiten in het menu Bestand en de command button Afsluiten hebben exact dezelfde betekenis. We geven ze ook dezelfde programmacode mee.

Actietabel
Object Gebeurtenis Actie

cmdAfsluiten Klikken mnuBestandAfsluiten Klikken

End

Programmacode
Option Explicit Private Sub cmdAfsluiten_Click() End End Sub Private Sub mnuBestandAfsluiten_Click() End End Sub

www.marcgoris.be

69

Programmeren in Visual Basic

Menu-items door klikken aanvinken

In het menu Instellingen is het de bedoeling dat de gebruiker zijn of haar keuze kan aanvinken. In feite heeft zon aanvinkbaar menu dezelfde functie als een checkbox. Ze heeft het voordeel dat je plaats spaart op het formulier. Het nadeel is dat de programmacode zwaarder wordt, zeker wanneer het aanvinken van een menu-item betekent dat alle anderen uitgevinkt moeten worden. Het menu heeft in dat geval dezelfde functie als Options buttons.

Actietabel
Object Gebeurtenis Actie

mnuInstellingenGrijs

Klikken

mnuInstellingenGeel

Klikken

mnuInstellingenGroen

Klikken

mnuInstellingenBereikTot10

Klikken

mnuInstellingenBereikTot100

Klikken

mnuInstellingenBereikTot1000

Klikken

MnuInstellingenGrijs is aangevinkt MnuInstellingenGeel en mnuInstellingenGroen niet aangevinkt achtergrondkleur formulier = Grijs mnuInstellingenGeel aangevinkt mnuInstellingenGrijs en mnuInstellingenGroen niet aangevinkt achtergrondkleur formulier = Geel mnuInstellingenGrijs en mnuInstellingenGeel niet aangevinkt mnuInstellingenGroen aangevinkt achtergrondkleur formulier = Groen mnuInstellingenBereikTot10 aangevinkt mnuInstellingenBereikTot100 en mnuInstellingenBereikTot1000 niet aangevinkt mnuInstellingenBereikTot100 aangevinkt mnuInstellingenBereikTot10 en mnuInstellingenBereikTot1000 niet aangevinkt mnuInstellingenBereikTot10 en mnuInstellingenBereikTot100 niet aangevinkt mnuInstellingenBereikTot1000 aangevinkt

Programmacode
Private Sub mnuInstellingenGrijs_Click() mnuInstellingenGrijs.Checked = True mnuInstellingenGeel.Checked = False mnuinstellingenGroen.Checked = False frmRaadspel.BackColor = &H8000000F End Sub

70

www.marcgoris.be

Programmeren in Visual Basic

Private Sub mnuInstellingenGeel_Click() mnuInstellingenGrijs.Checked = False mnuInstellingenGeel.Checked = True mnuinstellingenGroen.Checked = False frmRaadspel.BackColor = &H80FFFF End Sub Private Sub mnuInstellingenGroen_Click() mnuInstellingenGrijs.Checked = False mnuInstellingenGeel.Checked = False mnuinstellingenGroen.Checked = True frmRaadspel.BackColor = &HC0FFC0 End Sub Private Sub mnuInstellingenBereikTot10_Click() mnuInstellingenBereikTot10.Checked = True mnuInstellingenBereikTot100.Checked = False mnuInstellingenBereikTot1000.Checked = False End Sub Private Sub mnuInstellingenBereikTot100_Click() mnuInstellingenBereikTot10.Checked = False mnuInstellingenBereikTot100.Checked = True mnuInstellingenBereikTot1000.Checked = False End Sub Private Sub mnuInstellingenBereikTot1000_Click() mnuInstellingenBereikTot10.Checked = False mnuInstellingenBereikTot100.Checked = False mnuInstellingenBereikTot1000.Checked = True End Sub

Informatie over het programma en de auteur

In het menu Info vind je twee opties, eentje voor meer informatie over het programma, en eentje voor informatie over de auteur. Zorg ervoor dat de volgende twee MessageBoxen verschijnen wanneer je op de respectievelijke knoppen klikt.

www.marcgoris.be

71

Programmeren in Visual Basic

Actietabel
Object Gebeurtenis Actie

mnuInfoProgramma mnuBeeldScore

Klikken Klikken

IntInfo = MsgBox(Raadspel v. 1.0.0 & vbCrLf & vbCrLf & KA Malle Software, 64, Programma) IntInfo = MsgBox(Marc Goris & vbCrLf & vbCrLf & marc@sitebuilder.be, 64, Programma)

Gegevenstabel
Gegeven Soort Type Bron Commentaar

intInfo

Var

Integer

frmRaadnspel

Programmacode
Option Explicit Dim intInfo As Integer Private Sub mnuInfoProgramma_Click() intInfo = MsgBox("Raadspel v. 1.0.0" & vbCrLf & vbCrLf & "KA Malle Software", 64, "Programma") End Sub Private Sub mnuInfoAuteur_Click() intInfo = MsgBox("Marc Goris" & vbCrLf & vbCrLf & "www.marcgoris.be", 64, "Auteur") End Sub

Een nieuw spel beginnen Werken met willekeurige getallen Het is de bedoeling dat de computer een willekeurig getal kiest dat de gebruiker moet raden. De grens van de willekeurige getallen wordt bepaald door de keuze die de gebruiker maakt in het menu Instellingen. Voor het genereren van een willekeurig getal bestaat de functie Randomize en de opdracht Rnd. De functie Randomize initialiseert de generator voor willekeurige getallen. Met de opdracht Rnd wordt een willekeurig getal tussen 0 en 1 (0 wel maar 1 niet inbegrepen) gegenereerd. Dat getal wordt dan vermenigvuldigd met het hoogst mogelijk te genereren willekeurig getal. Met de functie Int wordt het willekeurig getal (dat per definitie een kommagetal is) geconverteerd naar een integer (geheel getal). De syntax ziet er dan uit als volgt : Randomize intGetal1 = int(Rnd * 10) In dit voorbeeld wordt een waarde tussen 0 en 9 gegenereerd.

72

www.marcgoris.be

Programmeren in Visual Basic

Actietabel
Object Gebeurtenis Actie

cmdNieuw

Klikken

txtGok

Veranderen

cmdRaden

Klikken

Willekeurig getal genereren Keuze True Keuze mnuInstellingenBereikTot10 is aangevinkt IntGetal : Int(Rnd x 10 + 1) strEindwaarde = 10 Keuze mnuInstellingenBereikTot100 is aangevinkt IntGetal : Int(Rnd x 100 + 1) strEindwaarde = 100 Keuze mnuInstellingenBereikTot1000 is aangevinkt IntGetal : Int(Rnd x 1000 + 1) strEindwaarde = 1000 Einde Keuze lblRaden.Caption = Raad een getal tussen 1 en & strEindwaarde txtGok zichtbaar maken intTeller = 1 cmdRaden aanklikbaar maken Keuze True Keuze intGetal < Val(txtGok.Text) LblResultaat.Caption = txtGok.Text & is te hoog! TxtGok leegmaken InTeller met 1 verhogen Keuze intGetal > Val(txtGok.Text) LblResultaat.Caption = txtGok.Text & is te laag! TxtGok leegmaken InTeller met 1 verhogen Keuze zoniet MessageBox U heeft het getal geraden in & intTeller & beurten LblRaden, lblResultaat en txtGok leegmaken txtGok onzichtbaar maken cmdRaden niet aanklikbaar maken Einde Keuze
Type Bron Commentaar

Gegevenstabel
Gegeven Soort

intGetal intTeller strEindwaarde

Var Var Var

Integer Integer String

frmRaadnspel frmRaadspel frmRaadspel

www.marcgoris.be

73

Programmeren in Visual Basic

Programmacode
Option Explicit Dim intInfo, intGetal, intTeller As Integer Dim strEindwaarde As String ... Private Sub cmdNieuw_Click() 'Een willekeurig getal genereren tussen 1 en het gekozen bereik Randomize Select Case True Case mnuInstellingenBereikTot10.Checked intGetal = Int(Rnd * 10 + 1) strEindwaarde = " 10" Case mnuInstellingenBereikTot100.Checked intGetal = Int(Rnd * 100 + 1) strEindwaarde = " 100" Case mnuInstellingenBereikTot1000.Checked intGetal = Int(Rnd * 1000 + 1) strEindwaarde = " 1000" End Select 'De invoer voorbereiden lblRaden.Caption = "Raad een getal tussen 1 en " & strEindwaarde txtGok.Visible = True 'De teller klaarzetten voor de eerste poging intTeller = 1 End Sub Private Sub txtGok_Change() 'De knop Raden toegankelijk maken cmdRaden.Enabled = True End Sub Private Sub cmdRaden_Click() 'De gok evalueren; indien goed geraden een messagebox met aantal beurten 'tonen en alle elementen weer de beginwaarden geven Select Case True Case intGetal < Val(txtGok.Text) lblResultaat.Caption = txtGok.Text & " is te hoog!" txtGok.Text = "" intTeller = intTeller + 1

74

www.marcgoris.be

Programmeren in Visual Basic

Case intGetal > Val(txtGok.Text) lblResultaat.Caption = txtGok.Text & " is te laag!" txtGok.Text = "" intTeller = intTeller + 1 Case Else intInfo = MsgBox("U heeft het getal geraden in " & intTeller & " beurten.", 0, "Uw score") lblRaden.Caption = "" lblResultaat.Caption = "" txtGok.Text = "" txtGok.Visible = False cmdRaden.Enabled = False End Select End Sub

Werk nu het voorbeeld verder uit in Visual Basic en bewaar het project als Vb05.

6.3

Oefeningen Oefening 9

Open de voorbeeldoefening Vb04 (het vertaalspelletje). Zorg voor een aangepast menu voor dit programma, waarin het mogelijk is de vertaalrichting en de taalkeuze via het menu kenbaar te maken. Gebruik dezelfde hoofdmenus als in het voorbeeld dat we in dit hoofdstuk samen hebben gemaakt. Bewaar het project in een nieuwe map met als nieuwe naam Oef09.

Oefening 10

Open de oefening Oef06 (berekenen van het zakgeld). Zorg voor een aangepast menu voor dit programma, waarin alle keuzemogelijkheden vervat zitten. Bewaar het project in een nieuwe map met als nieuwe naam Oef10.

www.marcgoris.be

75

Programmeren in Visual Basic

7.

Een project met meerdere formulieren


Heel wat Windows-toepassingen bestaan uit meer dan n scherm. In dit hoofdstuk leren we toepassingen maken met meer dan n formulier. We maken een nieuw project met daarin vier formulieren. Het is de bedoeling dat de gebruiker drie quizzen kan spelen : een aardrijkskundequiz, een informaticaquiz en een biologiequiz. In een eerste openingsscherm kan de gebruiker een van deze quizzen kiezen. Elke quiz wordt geopend in een apart formulier. Maak eerst het beginformulier aan en volg daarbij de objectentabel. Bewaar het project met als naam vb06.

Objectentabel Beginformulier
Object Type Naam Eigensch. Waarde

Beginformulier Knop Aardrijkskunde Knop Informatica Knop Biologie Knop Afsluiten Menu Bestand - Menu Afsluiten Menu Quiz - Menu Aardr.
76

Formulier

frmBegin

Command button cmdAardrijkskunde Command button cmdInformatica Command button cmdBiologie Command button cmdAfsluiten Menu Menu Menu Menu mnuBestand mnuBestandAfsluiten mnuQuiz mnuQuizAardrijkskunde
www.marcgoris.be

Caption Caption Picture Style Caption Picture Style Caption Picture Style Caption Picture Style Caption Caption Shortcut Caption Caption

De KA Malle quiz &Aardrijkskunde Icons/elements/earth.ico Graphical &Informatica Icons/win95/mycomp.ico Graphical Bio&logie Icons/Misc/Misc44.ico Graphical Afsluiten Icons/traffic/trffc14.ico Graphical &Bestand Afsluiten Ctrl + F4 &Quiz &Aardrijkskunde

Programmeren in Visual Basic

Object

Type

Naam

Eigensch.

Waarde

- Menu Informatica - Menu Biologie Menu Info - Menu Info


7.1

Menu Menu Menu Menu

mnuQuizInformatica mnuQuizBiologie mnuHelp mnuHelpInfo

Caption Caption Caption Caption

&Informatica Bio&logie &Help In&fo

Nieuwe formulieren toevoegen aan een project

Het is nu de bedoeling om drie nieuwe formulieren te ontwerpen : voor elke quiz eentje. Je kan extra formulieren toevoegen via de mogelijkheid Add form in het menu Project.

Maak nu de volgende drie schermen aan en volg daarbij de objectentabellen op de volgende bladzijden. Voor alle duidelijkheid : het lege label lblResultaat komt in de lege ruimte onder de twee command buttons.

www.marcgoris.be

77

Programmeren in Visual Basic

Objectentabel formulier Aardrijkskundekwis


Object Type Naam Eigensch. Waarde

Formulier Aardr. Label Opdracht

Formulier Label

frmAardrijkskunde lblOpdracht

Caption Icon Caption Font Text Font Alignment Text Font Alignment Text Font Alignment Text Font Alignment Text Font Alignment Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize

Invulvakje Bolivi Invulvakje Colombia Invulvakje Ecuador Invulvakje Paraguay Invulvakje Uruguag Label Bolivi Label Colombia Label Ecuador Label Paraguay Label Uruguay

Textbox Textbox Textbox Textbox Textbox Label Label Label Label Label

txtAntwoord1 txtAntwoord2 txtAntwoord3 txtAntwoord4 txtAntwoord5 lblLand1 lblLand2 lblLand3 lblLand4 lblLand5

Aardrijkskundequiz Icons/elements/earth.ico Zet het nummertje van de juiste hoofdstad bij elk land Comic Sans MS 12 pt (leeg) Comic Sans MS 12 pt center (leeg) Comic Sans MS 12 pt center (leeg) Comic Sans MS 12 pt center (leeg) Comic Sans MS 12 pt center (leeg) Comic Sans MS 12 pt Center Bolivi Comic Sans MS 12 pt True Colombia Comic Sans MS 12 pt True Ecuador Comic Sans MS 12 pt True Paraguay Comic Sans MS 12 pt True Uruguay Comic Sans MS 12 pt True

78

www.marcgoris.be

Programmeren in Visual Basic

Object

Type

Naam

Eigensch.

Waarde

Label Asuncion Label Bogota Label La Paz Label Montevideo Label Quito Knop Controleren Knop Sluiten Label Resultaat

Label Label Label Label Label

lblHoofdstad1 lblHoofdstad2 lblHoofdstad3 lblHoofdstad4 lblHoofdstad5

Command button cmdControleren Command button cmdSluiten Label lblResultaat

Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize Caption Caption Caption Font Forecolor

1. Asuncion Comic Sans MS 12 pt True 2. Bogota Comic Sans MS 12 pt True 3. La Paz Comic Sans MS 12 pt True 4. Montevideo Comic Sans MS 12 pt True 5. Quito Comic Sans MS 12 pt True Het antwoord &controleren Deze quiz &sluiten (leeg) Comic Sans MS 12 pt Rood

Objectentabel formulier Informaticakwis


Object Type Naam Eigensch. Waarde

Formulier Informatica Formulier Label Opdracht Invulvakje Applenetwerk Invulvakje Bestandsoverdracht Invulvakje E-mail Label

frmInformatica lblOpdracht

Caption Icon Caption Font Text Font Alignment Text Font Alignment Text Font Alignment

Textbox Textbox Textbox

txtAntwoord1 txtAntwoord2 txtAntwoord3

Informaticaquiz Icons/win95/mycomp.ico Zet het nummertje van elk protocol bij de juiste toepassing Comic Sans MS 12 pt (leeg) Comic Sans MS 12 pt center (leeg) Comic Sans MS 12 pt center (leeg) Comic Sans MS 12 pt center
79

www.marcgoris.be

Programmeren in Visual Basic

Object

Type

Naam

Eigensch.

Waarde

Invulvakje PCnetwerken Invulvakje Websites

Textbox Textbox

txtAntwoord4 txtAntwoord5 lblToepassing1 lblToepassing2 lblToepassing3 lblToepassing4 lblToepassing5 lblProtocol1 lblProtocol2 lblProtocol3 lblProtocol4 lblProtocol5

Label Apple-netwerken Label Label Bestandsoverdracht Label E-mail Label PC-netwerken Label Websites Label ATCP Label FTP Label HTTP Label POP SMTP Label TCP/IP Knop Controleren
80

Label Label Label Label Label Label Label Label Label

Command button cmdControleren


www.marcgoris.be

Text Font Alignment Text Font Alignment Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize Caption

(leeg) Comic Sans MS 12 pt center (leeg) Comic Sans MS 12 pt Center Apple-netwerken Comic Sans MS 12 pt True Bestandsoverdracht Comic Sans MS 12 pt True E-mail Comic Sans MS 12 pt True PC-netwerken Comic Sans MS 12 pt True Websites Comic Sans MS 12 pt True 1. ATCP Comic Sans MS 12 pt True 2. FTP Comic Sans MS 12 pt True 3. HTTP Comic Sans MS 12 pt True 4. POP SMTP Comic Sans MS 12 pt True 5. TCP/IP Comic Sans MS 12 pt True Het antwoord &controleren

Programmeren in Visual Basic

Knop Sluiten Label Resultaat

Command button cmdSluiten Label lblResultaat

Caption Caption Font Forecolor

Deze quiz &sluiten (leeg) Comic Sans MS 12 pt Rood

Objectentabel formulier Biologiekwis


Object Type Naam Eigensch. Waarde

Formulier Biologie Label Opdracht

Formulier Label

frmBiologie lblOpdracht

Caption Icon Caption Font Text Font Alignment Text Font Alignment Text Font Alignment Text Font Alignment Text Font Alignment Text Font Autosize Text Font Autosize Text Font Autosize

Invulvakje Boom Invulvakje Insect

Textbox Textbox

txtAntwoord1 txtAntwoord2 txtAntwoord3 txtAntwoord4 txtAntwoord5 lblSoort1 lblSoort2 lblSoort3

Invulvakje Paddestoel Textbox Invulvakje Vis Invulvakje Vogel Label Boom Label Insect Label Paddestoel Textbox Textbox Label Label Label

Biologiequiz Icons/Misc/Misc44.ico Zet het nummertje van elke naam bij de juiste soort. Comic Sans MS 12 pt (leeg) Comic Sans MS 12 pt center (leeg) Comic Sans MS 12 pt center (leeg) Comic Sans MS 12 pt center (leeg) Comic Sans MS 12 pt center (leeg) Comic Sans MS 12 pt center Boom Comic Sans MS 12 pt True Insect Comic Sans MS 12 pt True Paddestoel Comic Sans MS 12 pt True

www.marcgoris.be

81

Programmeren in Visual Basic

Object

Type

Naam

Eigensch.

Waarde

Label Vis Label Vogel Label Dambord Label Dodaars Label Goudiep Label Meelkop Label Winde Knop Controleren Knop Sluiten Label Resultaat

Label Label Label Label Label Label Label

lblSoort4 lblSoort5 lblNaam1 lblNaam2 lblNaam3 lblNaam4 lblNaam5

Command button cmdControleren Command button cmdSluiten Label lblResultaat

Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize Text Font Autosize Caption Caption Caption Font Forecolor

Vis Comic Sans MS 12 pt True Vogel Comic Sans MS 12 pt True 1. Dambord Comic Sans MS 12 pt True 2. Dodaars Comic Sans MS 12 pt True 3. Goudiep Comic Sans MS 12 pt True 4. Meelkop Comic Sans MS 12 pt True 5. Winde Comic Sans MS 12 pt True Het antwoord &controleren Deze quiz &sluiten (leeg) Comic Sans MS 12 pt Rood

7.2.

Methoden bij het werken met formulieren

Load frmFormulier

frmFormulier.Show

frmFormulier.Hide

Unload frmFormulier

Activate frmFormulier

82

www.marcgoris.be

Programmeren in Visual Basic

Vul de onderstaande actietabellen aan.

Actietabel frmBegin
Object Gebeurtenis Actie

mnuBestand Afsluiten mnuQuiz Aardrijkskunde mnuQuiz Informatica mnuQuiz Biologie mnuHelpInfo cmdAardrijkskunde cmdInformatica cmdBiologie cmdAfsluiten

Klikken Klikken Klikken Klikken Klikken Klikken Klikken Klikken Klikken Messagebox met naam van het programma, versie, auteur en datum

Actietabel frmAardrijkskunde
Object Gebeurtenis Actie

cmdControleren Klikken

cmdSluiten

Klikken

www.marcgoris.be

83

Programmeren in Visual Basic

Actietabel frmInformatica
Object Gebeurtenis Actie

cmdControleren Klikken

cmdSluiten

Klikken

Actietabel frmBiologie
Object Gebeurtenis Actie

cmdControleren Klikken

cmdSluiten

Klikken

Gegevenstabel
Gegeven Soort Type Bron Commentaar

intResultaat bytTotaal bytTotaal bytTotaal


84

Var Var Var Var

Integer Byte Byte Byte

frmBegin - private frmAardrijkskunde - private frmInformatica - private frmBiologie - private


www.marcgoris.be

Programmeren in Visual Basic

7.3

Het startscherm van het project

Het project dat we nu maken, bestaat uit 4 formulieren. Het is duidelijk dat het formulier frmBegin het openingsscherm van dit programma is. Dat moeten we echter nog wel zo instellen. Dat doe je via de mogelijkheid Project properties in het menu Project :

Kies in het dialoogvenster Project properties onder de mogelijkheid Startup Object in het lijstje het formulier frmBegin. 7.4 Openen met een splash-screen

Een splash-screen is een venstertje dat getoond wordt tijdens het openen van een Windows-toepassing. Zon schermpje heeft de bedoeling al iets op het scherm te tonen terwijl de gebruiker wacht op het inladen van de toepassing. Onze oefeningen zijn uiteraard erg klein, en het splash-screen flitst dus al weg nog voor je het hebt kunnen bekijken. Daarom zullen we een vertraging inbouwen voor het tonen van het splash-screen. Eerst ontwerpen we het splash-screen zelf. Dat doen we door een nieuw formulier aan het project toe te voegen. In het keuzescherm dat nu verschijnt, kies je de mogelijkheid splash-screen.

www.marcgoris.be

85

Programmeren in Visual Basic

Op het scherm verschijnt een soort sjabloon voor een splash-screen, een model dat je kan gebruiken om je eigen splash-screen te ontwerpen :

Ontwerp nu het volgende splash-screen voor het voorbeeldprogramma. Je mag voor de foto eender welke passende foto van onze schoolwebsite kiezen. Je zal merken dat niet alle onderdelen van het splash-screen netjes worden getoond als je het uittest. Dat komt omdat er nog programmacode achter zit. Die kan je best verwijderen in het codevenster.

Uiteraard ga je een splash-screen niet instellen als het openingsscherm via de Project properties, aangezien het splash-screen in dat geval gewoon op het scherm zou blijven staan. Het is de bedoeling dat dit venster op het scherm blijft staan tot het beginscherm van de toepassing is geladen. Daarom gaan we het splash-screen als eerste openen via een algemene programmacode. Volg daarvoor de volgende stappen : 1. Klik op het menu Project en kies Add Module.

86

www.marcgoris.be

Programmeren in Visual Basic

2. Schrijf in de nieuwe module de procedure Main volgens de hiernaast afgebeelde programmacode. In deze code wordt eerst het splash-screen geladen en getoond. Ondertussen wordt het beginscherm geladen, en op zijn beurt getoond, waarna het splashscreen wordt verwijderd.

3. Kies nu als Startup Object in de Project Properties nu de procedure Sub Main. Test het programma uit. Je zal merken dat het splash-screen haast te snel voor het oog wegflitst, en het beginscherm van onze quiz onmiddellijk wordt getoond. Dat komt natuurlijk omdat het een zeer klein programmatje betreft. In zon geval wordt natuurlijk zelden met een splash-screen gewerkt. 4. Voeg nu het besturingselement Timer toe aan het splash-screen. Het speelt geen rol waar je het ergens op je scherm zet, aangezien het onzichtbaar is wanneer je het programma uitvoert. 5. Geef het timer-besturingselement in het properties-window eerst de naam tmrTimer en zet de interval op 2500 (wat staat voor 2500 miliseconden ofwel 2,5 seconde). Dubbelklik op het timer-icoontje op het scherm en voer de code in die hier is afgebeeld.

6. We passen nu de procedure Sub Main aan, zodat het splashscreen geladen en getoond wordt, en in de achtergrond het beginscherm wordt geladen. Test het programma nu opnieuw uit, en bewaar het project Vb06 met alle onderdelen.

www.marcgoris.be

87

Programmeren in Visual Basic

7.5

Werken met MDI-formulieren

Alle formulieren die we tot nu toe hebben ontworpen, zijn van het SDI-type (Single Document Interface). Dit is ook de meest voorkomende soort formulieren. In sommige toepassingen kom je ook MDI-formulieren (Multiple Document Interface) tegen. Vergelijk het met teksten in Word of Excel-documenten. Als je er daar meerdere van geopend hebt, worden ze binnen dezelfde toepassing getoond. Je kan ze binnen die toepassing minimaliseren en maximaliseren, maar ze blijven steeds binnen het formulier van zon toepassing. Dergelijke hoofdformulieren worden MDI-formulieren genoemd. Er kan er slechts eentje gemaakt worden binnen n project. Omdat het werken met MDI-formulieren enigszins verouderd is, gaan we er niet te diep op in. Toch overlopen we kort de stappen om zon MDI-formulier aan te maken, uiteraard vanuit een nieuw project. 1 2 Je opent eerst een nieuw project. Automatisch wordt het eerste formulier aangemaakt. In het menu Project kies je Add MDI-form.

Het enige soort formulier dat je nu kan toevoegen is een MDI-formulier. Je zal merken dat eenmaal zon MDIformulier toegevoegd is, het niet meer mogelijk een tweede MDI-formulier toe te voegen.

Op de achtergrond staat nog steeds het oorspronkelijke formulier (dat we voor de gemakkelijkheid gewoon Form1 blijven noemen). In het Properties Window vind je de eigenschap MDIChild, die standaard de waarde False heeft. We zetten nu de waarde van deze eigenschap op True.

88

www.marcgoris.be

Programmeren in Visual Basic

Als je het programma nu uitvoert, zie je dat het formulier Form1 binnen het MDI-formulier wordt weergegeven.

Je kan het formulier verplaatsen binnen het MDI-formulier. Wanneer het formulier buiten het kader van het MDI-formulier wordt verplaatst, verschijnen er automatisch schuifbalken. Het is natuurlijk de bedoeling dat je meerdere formulieren in het MDI-formulier ziet staan dat is net de bedoeling van MDI-formulieren. Daarom maken we even nog vier andere formulieren aan (die we gemakshalve Form2 t.e.m. Form5 noemen). Ook voor deze formulieren geven we de eigenschap MDIChild de waarde True. Wanneer je het programma opnieuw uittest, merk je dat nog altijd slechts alleen het eerste formulier getoond wordt wat normaal is, aangezien dat met gewone formulieren ook zo is. De andere formulierenin het MDI-formulier zichtbaar te maken, lukt het best via een korte programmacode bij het laden van het MDIformulier.

Binnen het MDI-formulier kan je de formulieren minimaliseren of maximaliseren. Het is door middel van speciale methoden (zoals bijvoorbeeld de methode Arrange) mogelijk om acties uit te voeren op deze formulieren.

www.marcgoris.be

89

Programmeren in Visual Basic

7.6

Globale variabelen

We willen ons programma personaliseren. Wanneer het beginscherm (met de knoppen voor de drie quizzen) wordt getoond, wordt door middel van een inputbox de naam van de gebruiker gevraagd. Het is de bedoeling dat die naam in de opdracht van elke quiz wordt weergegeven.

De ingegeven naam moet dus in elk formulier beschikbaar zijn. Daarom wordt de string strNaam niet lokaal in een formulier, maar wel globaal in een module Main gedeclareerd. Die module bestaat reeds. 1. Open de programmacode van de module Main en pas de programmacode aan : Declareer strNaam als globaal gegeven Verwijder het laden van frmBegin. Dat doen we omdat anders de inputbox gelijktijdig met het splash-screen getoond wordt.

2. Open de programmacode van het splash-screen, en pas het aan zodat het het formulier frmBegin pas geladen wordt na 2,5 seconde.

3. Open het formulier frmBegin en dubbelklik op een lege ruimte in het formulier. Zorg ervoor dat bij het laden van het formulier de inputbox getoond wordt.

4. Tenslotte passen we in het formulier frmAardrijkskunde de code zo aan dat de naam van de gebruiker in de opdrachtregel verschijnt. We doen hetzelfde voor de formulieren frmInformatica en frmBiologie.

90

www.marcgoris.be

Programmeren in Visual Basic

7.7

Oefeningen Oefening 11

Maak een programma voor het berekenen van prijzen van een garage. Vanuit een openingsscherm kunnen drie schermen worden geopend : eentje voor de verkoop van een wagen, eentje voor de herstelling van een wagen en eentje voor de levering van wisselstukken. Uiteraard start je programma op met een splash-screen, dat je zelf ontwerpt. Verzin eveneens een leuke naam voor je programma. In het scherm voor de verkoop van de wagen is het mogelijk om te kiezen uit vier basismodellen : een Ka (8.550 euro), een Fiesta (9.750 euro), een Focus (11.300 euro) en een Mondeo (14.600 euro). Bovendien is het mogelijk om uit de volgende acht opties te kiezen : radio-CD (280 euro), airco (675 euro), electrische spiegels (145 euro), verwarmde zetels (125 euro), GPS (1335 euro), open dak (695 euro), lederen interieur (1150 euro) en metaalkleur (420 euro). De gebruiker kan zijn keuze maken met selection buttons, check boxes, list boxes, combo boxes, aanklikbare menus, Dat kan je zelf allemaal kiezen. Telkens wanneer er een keuze gemaakt wordt, verschijnt ergens op het formulier de juiste totale prijs van de wagen met de gekozen opties. In het scherm voor de herstelling van een wagen geeft de gebruiker het aantal werkuren in en de kostprijs van de gebruikte wisselstukken. Het standaard-uurloon bedraagt 24,95 euro; de gebruiker kan dit wijzigen, maar enkel indien hij dat uurloon ontgrendelt. Op het scherm verschijnt de totale kostprijs voor de herstelling van de wagen. In het scherm voor de levering van wisselstukken, kan de gebruiker de naam, eenheidsprijs en aantal wisselstukken ingeven. De gebruiker krijgt telkens de vraag of hij/zij nog andere wisselstukken wil kopen, en kan hij opnieuw de naam, eenheidsprijs en aantal wisselstukken ingeven. Na elke keer wordt op het scherm het totale bedrag weergegeven. Na het invullen van een van deze drie schermen, wordt een vierde scherm geopend, waarin het berekende totaalbedrag verschijnt, 21 % BTW wordt berekend, en de totale factuurprijs wordt berekend. Alle drie de waarden moeten op het scherm zichtbaar zijn. Ontwerp de schermen zoals je zelf wil, maar let erop dat je programma duidelijk en gebruiksvriendelijk is, en dat je een eventuele foute ingave van de gebruiker verhindert. Bewaar het project als Oef11.

Oefening 12

Maak een programma gelijkend op een wizard in een Microsoft programma om in 5 stappen een computersysteem samen te stellen. In het eerste scherm (Basisconfiguratie) kiest de gebruiker de processor, een harde schijf, het werkgeheugen, een grafische kaart, een geluidskaart, een moden en/of een netwerkkaart, en een CD-ROM, DVD of een writer. De gebruiker kiest daarbij telkens uit enkele mogelijkheden die je zelf voorziet. Dat kan door middel van option buttons, listbox of combobox. Zorg ervoor dat voor elke keuze een realistische prijs is voorzien (in euro). In het tweede scherm (invoerapparaten) kiest de gebruiker een muis, een toetsenbord, een gamepad en/of een scanner. In het derde scherm (uitvoerapparaten) kiest de gebruiker een beeldscherm, hoofdtelefoon of luidsprekers en een printer. In het vierde scherm (software) kan de gebruiker kiezen tussen enkele besturingssystemen en enkele softwarepakketten. Let daarbij op dat de gebruiker meer dan n softwarepakket tegelijk moet kunnen kiezen. In elk van deze vier schermen moet de gebruiker in een textbox de totale prijs van de tot dan toe gekozen onderdelen kunnen zien. Bovendien moet je vanuit elk scherm command buttons voorzien om terug te gaan naar het vorige scherm, verder te gaan naar het volgende scherm of het programma af te sluiten. In het laatste scherm wordt een overzicht weergegeven het computersysteem (d.w.z. een lijst van de gekozen onderdelen), en wordt de totale prijs weergegeven. Ontwerp de schermen zoals je zelf wil, maar let erop dat je programma duidelijk en gebruiksvriendelijk is, en dat je een eventuele foute ingave van de gebruiker verhindert. Maak gebruik van afbeeldingen en icoontjes. Bewaar het project als Oef12.

www.marcgoris.be

91

Programmeren in Visual Basic

8.
8.1.

Werken met functies


De functie Format

Met deze functie bepaal je de weergave van een getal, een string, een datum of een tijd. Het resultaat van deze functie is echter altijd een string, ook als het om getallen of datums gaat. Opmaak van getallen strResultaat = Format(12345,67, #,#0.00) strResultaat = Format(123,4,#0.000) strResultaat = Format(0,123,0.00 %) strResultaat = Format(123,4,currency) strResultaat = Format(123,4,scientific) 0 # . , % Currency Fixed Standard Percent Scientific Er wordt ofwel een getal ofwel een 0 getoond. Er wordt ofwel een getal ofwel niets getoond. Een decimaaltekent (zie het kadertje hieronder) Een cijfergroeperingsteken (zie het kadertje hieronder) Het getal wordt vermenigvuldigd met 100, en het procentteken wordt toegevoegd. Het getal wordt weergegeven met 2 cijfers na de komma, en het valutateken dat in het besturingssysteem werd gedefinieerd. Er wordt minstens n getal links en twee rechts van het decimaalteken geplaatst. Er worden altijd twee cijfers na de komma weergegeven, en een cijfergroeperingsteken geplaatst. Het getal wordt vermenigvuldigd met 100, en het procentteken wordt toegevoegd. Het getal wordt in de wetenschappelijke notatie weergegeven. 12.345,67 123,400 12,30 % 123,40 EUR 1,23E+02

Decimaalteken en cijfergroeperingstekens In Vlaanderen is het standaard-decimaalteken een komma, en het cijfergroeperingsteken een punt. In de Verenigde Staten is dat precies andersom. Die instelling kan je wijzigen in je besturingssysteem (configuratiescherm Landinstellingen). Het probleem is dat Visual Basic in de programmacode enkel het Amerikaanse systeem kent. Daarom zie je in de bovenstaande voorbeelden in de programmacode een komma voor een decimaalteken en een punt voor het cijfergroeperingsteken. Wanneer je het programma echter uitvoert, worden de instellingen van het besturingssysteem gebruikt (in ons geval het Vlaamse systeem dus) vandaar de resultaten in het voorbeeld. Opmaak van tekst strResultaat = Format(KA Malle, <) strResultaat = Format(KA Malle, >) strResultaat = Format(KA, @@@@@) & Malle strResultaat = Format(KA, @@@@@!) & Malle < > @ ! Alle tekens worden in kleine letters weergegeven. Alle tekens worden in hoofdletters weergegeven. Het teken wordt weergegeven als er eentje is, en een spatie als er geen teken is. De tekens worden rechts uitgelijnd; eventuele spaties worden er voor geplaatst. De tekens worden links uitgelijnd; eventuele spaties worden er achter geplaatst KA ka malle KA MALLE KAMalle Malle

92

www.marcgoris.be

Programmeren in Visual Basic

Opmaak van datums en tijden strResultaat = Format(Date,d/m/yy) strResultaat = Format(Date,dd-mm-yyyy) strResultaat = Format(Date,dddd d mmmm yyyy) strResultaat = Format(Time,h:m:s) strResultaat = Format(Time,hh:mm:ss) strResultaat = Format(Time,h:mm:ss AM/PM) d dd ddd dddd m mm mmm mmmm y yy yyyy h hh s ss AM/PM 15/9/03 15-09-2003 Maandag 15 september 2003 21:41:5 21:41:05 9:41:05 PM

Het nummer van de dag wordt weergegeven zonder een 0 ervoor (1 31). Het nummer van de dag wordt weergegeven met eventueel een 0 ervoor (01 31). De afkorting van de dag wordt weergegeven (ma, di, wo, do, vr, za, zo). De naam van de dag wordt voluit weergegeven. Het nummer van de maand wordt weergegeven zonder een 0 ervoor (1 12) ; in een formaat met uren staat de m voor minuten zonder een 0 ervoor (0 59). Het nummer van de maand wordt weergegeven met eventueel een 0 ervoor (01 12) ) ; in een formaat met uren staat de m voor minuten met eventueel een 0 ervoor (00 59). De afkorting van de maand wordt weergegeven (jan dec). De naam van de maand wordt voluit weergegeven. De dag van het jaar wordt weergegeven (1 366). Het jaartal wordt weergegeven met twee cijfers (vb. 03). Het jaartal wordt weergegeven met vier cijfers (vb. 2003). Het uur wordt weergegeven zonder een 0 ervoor (0 23). Het uur wordt weergegeven met eventueel een 0 ervoor (00 23). De seconden worden weergegeven zonder een 0 ervoor (0 59). De seconden worden weergegeven met eventueel een 0 ervoor (00 59). Het uur wordt weergegeven in een 12-uurs-klok, met am of pm erbij.

Voor de namen en afkortingen van dagen en maanden wordt de taal gebruikt van het besturingssysteem. Zo kan dezelfde Visual Basic-toepassing de dag in een andere taal weergeven op de ene computer dan op een andere. 8.2 Procedures en subprocedures

Al naar gelang van de bedoeling van een procedure, kan ze worden ingedeeld in :  Subprocedures  Property-procedures  Functieprocedures Subprocedures kunnen in twee vormen voorkomen :  Event procedure  General procedure Event procedures ken je al : het zijn de deelprogrammas die uitgevoerd worden bij een bepaalde gebeurtenis, zoals het klikken op een knop of het openen van een formulier. General procedures zijn deelprogrammas die vanuit een ander deelprogramma meestal een event procedure wordt opgeroepen. Property procedures zijn deelprogrammas die enkel bedoeld zijn om de eigenschappen van een object te wijzigen. Ze worden meestal opgeroepen vanuit een ander deelprogramma.

www.marcgoris.be

93

Programmeren in Visual Basic

8.3

Functieprocedures

Je weet al dat je in Visual Basic een groot aantal voorgedefinieerde functies kan gebruiken (zie blz. 2830). Je kan echter ook zelf functies schrijven, die dan binnen het formulier of zelfs binnen het hele project kunnen opgeroepen worden. Een functieprocedure levert altijd een waarde op. Stel : je wil een programma maken waarbij de computer een willekeurig getal berekent. De gebruiker kiest zelf tussen welke twee getallen het willekeurig getal zich moet bevinden. Het berekenen van het willekeurig getal, gebeurt in een functieprocedure.

Private Function WilGetal(lng1 As Long, lng2 As Long) As Long Randomize WilGetal = (Rnd * (lng2 - lng1)) + lng1 End Function Private Sub cmdEinde_Click() End End Sub Private Sub cmdBereken_Click() Dim lngGetal1 As Long Dim lngGetal2 As Long Dim lngResultaat As Long lngGetal1 = Val(txtBegin.Text) lngGetal2 = Val(txtEinde.Text) lngResultaat = WilGetal(lngGetal1, lngGetal2) lblResultaat = Str(lngResultaat.Caption) End Sub  Functies worden altijd helemaal vooraan de programmacode geschreven, voor alle procedures.  Aangezien het resultaat van een functie steeds een waarde oplevert, wordt ook een gegevenstype voor het resultaat bepaald in het voorbeeld is dat het type Long.  In de functie wordt gebruik gemaakt van waarden uit de subprocedure cmdBerekenen_Click. Die waarden worden doorgegeven als parameters. Meer over parameters leer je even verder in deze cursus.  In de functie wordt een resultaat berekend dat dezelfde naam heeft als de functie zelf. Het is die waarde die het uiteindelijke resultaat is van de functie.  In de subprocedure cmdBerekenen_Click wordt de functie aangeroepen, op dezelfde manier als het aanroepen van een voorgedefinieerde functie. Het resultaat dat daarmee wordt berekend in de subprocedure (in het voorbeeld is dat lngResultaat) moet van hetzelfde type zijn als het gegevenstype dat je bij de functie hebt bepaald.

94

www.marcgoris.be

Programmeren in Visual Basic

Makkelijk een nieuwe procedure aanmaken. Zelfgeschreven procedures, die niet afhangen van een gebeurtenis met een object in een formulier, en functies kan je gewoon intypen, maar het kan nog makkelijker. Activeer het programmacodescherm, en klik in het menu Tools op de optie Add Procedure.

Je kiest dan welk soort procedure je wil maken, en je geeft je procedure een naam. Verder kies je nog tussen Public en Private, maar daarover meer verder in deze cursus. Je merkt dat de aanhef en de afsluiting van de procedure automatisch werden aangemaakt. De rest moet je natuurlijk zelf nog aanvullen. Private Function WilGetal() End Function

In sommige gevallen kan het handig zijn om een functie (of een andere subprocedure) halfweg te kunnen afbreken bijvoorbeeld om een eindeloze lus te vermijden. Dat doe je als volgt : If lng2 < lng1 then Exit Function Een subprocedure kan je onderbreken met Exit Sub. Werk de procedure uit aan de computer en bewaar ze met als naam vb07. 8.4 Private Public Static Private, Public en Static De procedure of functie is enkel toegankelijk vanuit procedures in dezelfde module of hetzelfde formulier waarin het zich bevindt. De procedure is toegangelijk vanuit eender welke module of formulier in het project. Alle variabelen zijn statisch, wat wil zeggen dat de lokale variabelen hun waarde blijven behouden tussen twee oproepen van de procedure.

 Je bent niet verplicht om een van deze codewoorden voor de procedure of functie te zetten. Als je dat niet doet, is de procedure of functie automatisch Public.  Wanneer je een event procedure creert door te dubbelklikken op een object in het formulierontwerpvenster, wordt de event procedure automatisch Private gemaakt.

www.marcgoris.be

95

Programmeren in Visual Basic

8.5

Werken met parameters

In het voorbeeld van de functie op blz. 94 worden twee waarden doorgegeven vanuit de subprocedure cmdBerekenen_Click naar de functie, namelijk de waarden van de gegevens lngGetal1 en lngGetal2. In de functie worden die waarden opgevangen, maar hoeven ze niet dezelfde naam te krijgen (in het voorbeeld krijgen de twee waarden de namen lng1 en lng2).  De volgorde waarin je de parameters schrijft is belangrijk. Die moet namelijk dezelfde zijn in de aanroep als bij het opvangen.  Let erop dat de gegevenstypes van de gegevens hetzelfde moeten zijn in zowel de procedure waarin je aanroept als in de procedure of functie waarin je de waarden ontvangt.  Zoals gezegd hoeven de namen van de gegevens niet hetzelfde te zijn in beide procedures. Hierdoor wordt het mogelijk om onafhankelijke functies te maken. Je zou bijvoorbeeld de functie WilGetal als Public kunnen schrijven in een module Main. Vanuit elk deelprogramma kan je de functie dan aanroepen, en dan maakt het niet uit welke namen de begin- en eindwaarde voor het willekeurig getal hebben in de procedures waarin je de functie aanroept.

Parameters ByVal en ByRef. In het voorbeeld worden er parameters vanuit de procedure cmdBerekenen_Click naar de functie WilGetal gestuurd, maar de waarden wijzigen niet in de functie. We spreken hier van parameters in n richting. Wil je er zeker van zijn dat de oorspronkelijke waarden in de subprocedure cmdBerekenen_Click niet gewijzigd worden, dan kan je de parameter laten voorafgaan door ByVal. Wil je er zeker van zijn dat eventuele wijzigingen wel naar de subprocedure worden teruggestuurd, dan kan je de parameter laten voorafgaan door ByRef. Een voorbeeld : we passen het programma zo aan dat het berekende willekeurig getal de eindwaarde wordt voor een volgende berekening :
Private Function WilGetal(ByVal lng1 As Long, ByRef lng2 As Long) As Long Randomize lng2 = (Rnd * (lng2 - lng1)) + lng1 WilGetal = lng2 End Function

We laten in de procedure nu het gegeven lngGetal2 verschijnen in de textbox txtEinde. We voegen de volgende regel toe :
txtEinde.Text = Str(lngGetal2)

Probeer het programma even uit. Wijzig daarna in de aanhef van de functie ByRef door ByVal.

Stel dat bij het aanroepen van de functie de beginwaarde soms wel, en soms niet wordt meegegeven. De beginwaarde wordt dan een optionele parameter. In dat geval maken we van de eindwaarde lng1 en van de beginwaarde lng2. De reden waarom we de beide waarden wisselen, is omdat de optionele parameter steeds als laatste moet worden gedefinieerd. In ons voorbeeld : wijzig overal in de programmacode, behalve in de parameters, de gegevens lng1 door lng2 en omgekeerd. Doe hetzelfde voor lngGetal1 en lngGetal2. De programmacode van de functie ziet er dan zo uit :
Private Function WilGetal(ByVal lng1 As Long, Optional ByVal lng2 As Long) As Long Randomize lng1 = (Rnd * (lng1 - lng2)) + lng2 WilGetal = lng1 End Function
96 www.marcgoris.be

Programmeren in Visual Basic

Het probleem is dat wanneer er geen tweede parameter wordt meegegeven, er ook geen beginwaarde is vastgesteld in de functie. We moeten dus aangeven dat, wanneer de tweede parameter ontbreekt, de beginwaarde automatisch 1 is. Daarvoor gebruiken we de functie IsMissing :
Private Function WilGetal(ByVal lng1 As Long, Optional ByVal lng2 As Long) As Long Randomize If IsMissing(lng2) Then lng2 = 1 End If lng1 = (Rnd * (lng1 - lng2)) + lng2 WilGetal = lng1 End Function

Probeer nu eerst het programma uit. Er zou nu geen verschil mogen zijn in de manier waarop het programma werkt. Verwijder daarna de tweede parameter uit de subprocedure, en probeer het programma opnieuw uit. Je merkt dat de beginwaarde steeds 1 is, ongeacht de beginwaarde die je invult.

ParamArray Als je vooraf niet weet hoeveel waarden er precies worden doorgestuurd vanuit een procedure, kan je ParamArray gebruiken. Stel dat je een procedure maakt, waarbij je een aantal letters samenvoegt tot n woord. De letters worden als strings doorgegeven vanuit een subprocedure, maar je weet niet vooraf hoeveel letters er zijn. Het woord wordt samengesteld in de functie Woord. Eerst maken we de programmacode achter de knop cmdMaken : Private Sub cmdMaken_Click() Dim strWoord As String strWoord = Woord("M", "a", "l", "l", "e") txtWoord.Text = strWoord End Sub In dit geval sturen we 5 letters mee, maar dat kunnen er net zo goed drie of twintig zijn. Vervolgens maken we de functie Private Function Woord(ParamArray vntLetter()) As String Dim vntLet As Variant Dim strWoord As String strWoord = "" For Each vntLet In vntLetter strWoord = strWoord & vntLet Next vntLet Woord = strWoord End Function Merk op dat in de functie de parameter vntLetter van het type variant is. Bij gebruik van ParamArray ben je verplicht te werken met waarden van het type variant. Om het woord samen te stellen wordt gebruik gemaakt van een For Each Next-herhaling.

www.marcgoris.be

97

Programmeren in Visual Basic

8.6

Oefeningen

Oefening 13

Maak een programma waarbij een gebruiker de teller en de noemer van een breuk kan ingeven. De computer toont alle mogelijke vereenvoudigingen van de breuk in een textbox. Maak voor deze oefening het hiernaast afgebeelde formulier na. Voor het vereenvoudigen van de breuken, heb je de gemene delers van de noemer en de teller nodig. Die worden berekend in een functieprocedure. Bewaar het project met als naam oef13

Oefening 14

Maak een programma om te berekenen of iemand overgewicht heeft, door de BMI (Body Mass Index) te berekenen. Een BMI hoger dan 25 betekent overgewicht. De BMI wordt in een functieprocedure berekend. De formule daarvoor is : Gewicht in kg (Lengte in m) De gebruiker kan zijn/haar gewicht (in kg) en lengte (in cm) ingeven. Wanneer de gebruiker op een knop BMI Berekenen klikt, verschijnt het BMI en in een messagebox verschijnt of de gebruiker overgewicht heeft of niet. Bewaar het project met als naam oef14.

Oefening 15

Maak een programma waarbij de gebruiker een zin kan ingeven. Wanneer de gebruiker op een knop Statistieken klikt, worden de volgende statistieken op het scherm getoond : Het totaal aantal tekens in de zin. Het totaal aantal woorden in de zin. Of het een gewone zin, een vraag of een uitroep is.

Elk van deze waarden wordt in een aparte functieprocedure berekend. Bewaar het project met als naam oef15.

98

www.marcgoris.be

Programmeren in Visual Basic

9.
9.1.

Werken met arrays


Werken in rijen : eendimensionele arrays

Tot nog toe was het werken met gegevens erg eenvoudig : n gegeven had n naam, en kon precies n waarde bevatten. Met arrays wordt het mogelijk om meerdere waarden te bewaren in eenzelfde gegevensnaam. Je kan je dat zo voorstellen : sngGewicht 152,75

sngPrijs

142,63 0

751,05 1

968,41 2

112,69 3

453,86 4

In dit voorbeeld is het gegeven Gewicht een gewoon, enkelvoudig gegeven, zoals we ze tot nu toe altijd hebben gebruikt. Het gegeven heeft n naam, en bevat n waarde. Het gegeven Prijs is een array. Het heeft n naam, maar bevat 5 verschillende waarden. De vijf geheugenlocaties waarin die namen bewaard worden, zijn genummerd. Wanneer je met een bepaalde waarde uit de reeks wil werken, moet je dus niet alleen de naam van het gegeven, maar ook de positie van de waarde in de reeks meegeven. Merk op dat de eerste positie de positie 0 is. De positie van een element uit een array wordt de index genoemd. Declaratie van eendimensionele arrays Bij het declareren geef je altijd het aantal te reserveren geheugenlocaties mee. Bijvoorbeeld : Dim sngPrijs(4) as Single Dim strMaand(12) as String Het aantal geheugenlocaties moet altijd vast liggen het kan dus geen variabele zijn. Bovendien moet dit aantal altijd uitgedrukt zijn in een geheel getal. De volgende voorbeeld zijn dus onmogelijk :

 
Wel goed is :

Dim intAantal as Integer Dim sngPrijs(intAantal) as Single Dim sngPrijs(4.5) as Single

Const intAantal as Integer = 4 Dim sngPrijs(intAantal) as Single Je kan de ondergrens van een array ook instellen op 1. Dat doe je door in het gedeelte van de globale declaraties van een formulier (dus voor alle subprocedures) het commando Option base 1 te schrijven. De eerste positie in de array wordt vanaf dan als 1 aangeduid in plaats van 0. Dat geldt dan uiteraard wel voor alle arrays in het formulier. Option Base 1 Dim sngPrijs(5) as Single Je kan de ondergrens ook per array afzonderlijk bepaald worden met het codewoord to : Dim sngPrijs(5 to 10) as Single Dim strMaand(1 to 12) as String

www.marcgoris.be

99

Programmeren in Visual Basic

Het inbrengen van waarden in een array kan gebeurt met een gewone toekenningsopdracht. De index noteer je gewoon tussen haakjes : strMaand(1) = januari strMaand(2) = februari strMaand(3) = maart Je zou ook gebruik kunnen maken van een herhaalstructuur. Stel dat je de maanden van het jaar, die we eerst in een array hebben ingebracht, in de textbox txtJaar willen weergeven : For intTeller = 1 to intAantal strJaar = strJaar & strMaand(intTeller) & vbCrLf Next intTeller txtJaar.Text = strJaar

Arrays uit het geheugen halen Arrays kunnen soms veel geheugenlocaties bezetten zeker wanneer het omvangrijke arrays zijn van een gegevenstype dat veel ruimte vereist, zoals doubles, datums of variants. Wanneer je de array verder in je programma niet meer nodig hebt, kan het daarom belangrijk zijn om dat gedeelte van het geheugen weer vrij te maken, zodat de verdere verwerking van het programma vlotter verloopt. Een array uit het geheugen halen doe, gebruik je de opdracht Erase : Erase Maand(12)

Maak een programma waarbij de gebruiker voor de twaalf maanden van een jaar de totale neerslaghoeveelheid (in liter per m) en het totaal aantal uren zon ingeeft. Dat gebeurt door middel van een Inputbox in een herhaalstructuur. De maanden van het jaar zitten eveneens in een array, die je bij het laden van het formulier zelf hun waarden geeft. Nadat alle gegevens ingegeven zijn, verschijnen de namen van de maanden en de ingevoerde waarden elk in een textbox. Bewaar met als naam vb08.

Objectentabel formulier Weergegegevens


Object Type Naam Eigensch. Waarde

Formulier Weergeg. Textbox Maanden Textbox Neerslag Textbox Zon Knop Opnieuw Knop Afsluiten
100

Formulier Textbox Textbox Textbox

frmWeergegevens txtMaanden txtNeerslag txtZon

Command button cmdOpnieuw Command button cmdAfsluiten


www.marcgoris.be

Caption Text Multiline Text Multiline Text Multiline Caption Caption

Weergegevens (leeg) True (leeg) True (leeg) True Opnieuw Afsluiten

Programmeren in Visual Basic

9.2.

Werken in tabellen : meerdimensionele arrays

Met arrays is het eveneens mogelijk om meerdere gegevens in een tabelvorm (matrix) te bewaren onder n enkele gegevensnaam. De locatie van een waarde in de tabel dient dan te worden bepaald met een dubbele index, die als het ware de cordinaten vormen van de geheugenlocatie. strNaam 0 1 2 Mieke Linda Jan 0 Peter Joris Sofie 1 Hans Anja Michiel 2 Myriam Kristel Steven 3 Karel Bart Gitte 4

De waarde Kristel in deze tabel bevindt zich op de rij met als index 1 en de kolom met als index 3. strNaam(1,3) heeft dus de waarde Kristel, strNaam(2,1) heeft de waarde Sofie. Je kan zelfs een dimensie toevoegen, en ook nog in de diepte een aantal geheugenlocaties toevoegen. In het bovenstaande voorbeeld bevat de matrix strNaam 15 waarden (3 rijen maal 5 kolommen). Stel nu dat we op dezelfde wijze in de diepte 4 rijen maken, dan kunnen we 60 waarden bewaren. Je zou je het voorbeeld dan kunnen voorstellen als een ruimtelijke balk, in hoogte, breedte en diepte onderverdeeld in cellen :

In Visual Basic is het mogelijk op die manier tot 60 dimensies diep te programmeren. Het woord dimensie wordt dan wel abstract; je kan je immers geen ruimtelijke voorstelling maken van een array met meer dan 3 dimensies.

Declaratie van meerdimensionele arrays Je declareert een meerdimensionele array door het opgeven van de grenswaarden van elke dimensie : Dim strNaam(2,4) as String Dim sngPrijs(6,10,3) as Single Dim strNaam(1 to 3, 1 to 5) as String Dim sngPrijs(1 to 7, 1 to 11, 1 to 4) as Single

www.marcgoris.be

101

Programmeren in Visual Basic

Ook bij het werken met de waarden van de array in de programmatekst gebruik je de indexen van elke dimensie bij de naam van het gegeven : Dim strNaam(1 to 3, 1 to 5) as String . . . strNaam(1,1) strNaam(1,2) strNaam(1,3) strNaam(1,4) strNaam(1,5) = = = = = Mieke Peter Hans Myriam Karel

strNaam(2,1) = Linda strNaam(2,2) = Joris . . . Als je werkt in herhaalstructuren, dan programmeer je een herhaalstructuur in een andere herhaalstructuur. Het aantal herhaalstructuren dat je op die manier programmeert komt precies overeen met het aantal dimensies in de array : For intTeller1 = 1 to intAantalRijen For intTeller2 = 1 to intAantalKolommen strWie = strWie & strNaam(intTeller1, intTeller2) & next intTeller2 strWie = strWie & vbCrLf next intTeller1

Opdracht : herwerk het programma vb08 op blz. 100 zo dat de textboxes txtNeerslag en txtZon samen n textbox vormen, waarin beide gegevens telkens verschijnen. Beide gegevens (neerslaghoeveelheid en aantal uren zon) dienen wel apart te worden ingevoerd door middel van een Inputbox. Gebruik hiervoor een array met 2 dimensies. Bewaar je programma met als naam vb09.

9.3

Dynamische arrays

Soms ligt de bovengrens van een array niet altijd vast, maar is ze variabel. In dat geval kan je gebruik maken van dynamische arrays. Stel dat de gebruiker in een textbox moet ingeven voor hoeveel maanden hij/zij de weergegevens wil bekijken. Je declareert dan een array zonder het aantal elementen op te geven : Dim sngNeerslag() as Single Dim sngZon() as Single In de subprocedure waarin je daadwerkelijk met de array gaat werken, bepaal je de bovengrens van de array door middel van het Redim-statement. Je moet er daarbij wel voor opletten dat je in het Redimstatement hetzelfde gegevenstype noteert als in de declaratie van de variabele. bytAantal = Val(txtAantal.Text) Redim sngNeerslag(1 to bytAantal) as Single Redim sngZon(1 to bytAantal) as Single Telkens wanneer het Redim-statement wordt gebruikt, gaan de waarden in de array verloren. Wil je de oorspronkelijke waarden toch behouden, dan kan je gebruik maken van het codewoord Preserve : Redim Preserve sngNeerslag(1 to bytAantal) as Single Opdracht : herwerk het programma vb09 op deze bladzijde zo dat de gebruiker vooraf kan ingeven voor hoeveel maanden de weergegevens moeten ingevuld en weergegeven worden. Het maximale aantal is 12. Zorg voor een foutmelding indien de gebruiker een hogere waarde ingeeft. Bewaar je programma met dezelfde naam.
102 www.marcgoris.be

Programmeren in Visual Basic

9.4

Control arrays : rijen van objecten

In Visual Basic zou het uiteraard handig zijn als je, alsof je met arrays werkt, ook objecten kunt benaderen. Als voorbeeld maken we een programma om (maximum 10) namen in te geven en alfabetisch te sorteren. De namen worden elk apart in een textbox ingegeven. We maken daarvoor dit formulier aan. De tien textboxes voor het ingeven van de namen, vormen een control array. Dat wil zeggen dat we ze kunnen benaderen op precies dezelfde manier als een gewone array. Teken eerst de eerste textbox op het formulier. Zorg dat alle eigenschappen correct zijn ingesteld: Name = txtNaam Text = (leeg) Visible = False

Vervolgens zorg je ervoor dat de textbox geselecteerd is, en kopieer je ze naar het klembord (Ctrl + C). Wanneer je de inhoud van het klembord nu in het formulier wil plakken (Ctrl + V) dan verschijnt deze foutmelding :

Gezien we inderdaad een control array willen maken, kiezen we Ja. Er wordt nu een tweede textbox in de linkerbovenhoek van het formulier geplaatst. Je merkt dat de eigenschappen van de eerste textbox gewoon mee overgenomen werden. Je ziet ook dat in het properties venster in de lijst van objecten (het pulldown-menu boven de eigenschappen zelf) bij de naam van de textbox tussen haakjes een cijfertje staat. Dit is de index van de control array. Het eerste object in de control array krijgt automatisch als index de waarde 0. Sleep de textbox nu naar de juiste plaats op het formulier, net onder de eerste textbox. Maak op dezelfde manier de acht andere textboxes voor de invoer van de namen aan.

Objectentabel formulier Weergegegevens


Object Type Naam Eigensch. Waarde

Formulier Sorteren Label Aantal ingeven Textbox Aantal Knop Toon Textboxen Naam

Formulier Label Textbox Command button Textbox (array 0 9)

frmSorteren lblAantal txtAantal cmdToon txtNaam

Caption Caption Text Caption Text Visible

De Naamsorteerder Geef het aantal namen dat u wil sorteren (maximum 10) (leeg) Toon (leeg) False
103

www.marcgoris.be

Programmeren in Visual Basic

Object

Type

Naam

Eigensch.

Waarde

Textbox Gesorteerd Knop Sorteren Knop Leegmaken Knop Afsluiten

Multiline Textbox txtGesorteerd Text Visible Caption Command button cmdSorteren Visible Caption Command button cmdLeegmaken Visible Command button CmdAfsluiten Caption

True (leeg) False Sorteren False Leegmaken False Afsluiten

Wanneer de gebruiker het aantal namen ingeeft, moeten precies voldoende textboxes voor het ingeven van namen worden getoond. Wanneer de gebruiker een groter aantal dan 10 of een kleiner aantal dan 1 ingeeft, moet er een foutmelding verschijnen : Private Sub cmdToon_Click() Dim intTeller As Integer Dim bytAantal As Byte bytAantal = Val(txtAantal.Text) If (bytAantal > 10 Or bytAantal < 1) Then For intTeller = 0 To 9 txtNaam(intTeller).Visible = False Next intTeller intTeller = MsgBox("U dient een waarde tussen 1 en 10 in te geven!", vbExclamation, "Invoerfout") txtAantal.Text = "" txtAantal.SetFocus Else For intTeller = 0 To bytAantal - 1 txtNaam(intTeller).Visible = True Next intTeller cmdSorteren.Visible = True cmdLeegmaken.Visible = True End If End Sub Uiteraard kan je een waarde uit een control array eveneens inlezen met een gewone toekenningsopdracht buiten een herhaalstructuur. In dat geval zet je de index gewoon tussen haakjes : txtEerste = txtNaam(0).Text txtTweede = txtNaam(1).Text Gegevens sorteren met de bubblesort-methode Het principe van de bubblesort-methode maakt gebruik van een hulpgegeven. We sorteren twee getallen op de volgende manier : If bytGetal1 > bytGetal2 Then bytHulpgetal = bytGetal1 bytGetal1 = bytGetal2 bytGetal2 = bytHulpgetal End if

104

www.marcgoris.be

Programmeren in Visual Basic

Stel dat je de elementen van een array moet sorteren. Dat doe je in een geneste herhaalstructuur : For intTeller1 = 0 To bytAantal - 1 For intTeller2 = 0 To bytAantal - 1 If intGetal(intTeller2) > intGetal(intTeller2 + 1) Then intHulpgetal = intGetal(intTeller2) intGetal(intTeller2) = intGetal(intTeller2 + 1) intGetal(intTeller2 + 1) = intHulpgetal End If Next intTeller2 Next intTeller1

9.5

Control arrays in menus

Ook in menus kan je control arrays gebruiken. Voeg het menu zoals afgebeeld toe aan het formulier. De menus voor de kleuren krijgen allemaal de naam mnuAchtergrondKleur, en in het veld Index kan je de index van de control array zelf ingeven. Hier heb je dus niet het probleem dat de index per definitie begint met 0. Je moet er natuurlijk wel goed opletten dat je geen dubbele indexen maakt. Doe je dat per ongeluk wel, dan wordt een foutmelding getoond bij het sluiten van de menu editor.

Werk nu het voorbeeld verder uit. Zorg voor een goede programmacode achter elk object en elk menuitem. Zorg ervoor dat bij de keuze van een kleur via het menu Achtergrond de achtergrond die kleur aanneemt. Maak het programma gebruiksvriendelijk en bewaar het met als naam vb10.

www.marcgoris.be

105

Programmeren in Visual Basic

9.6

Oefeningen

Oefening 16

Maak een programma om een factuurtje van een boekenwinkel in een formulier af te drukken. De gebruiker geeft eerst in hoeveel verschillende titels hij of zij wenst te kopen. Daarna geeft de gebruiker de titel van een boek, de eenheidsprijs en het aantal exemplaren in. Ontwerp hiervoor zelf een formuliertje. Nadat de gegevens voor het eerste boek werd ingegeven, wordt het formuliertje leeggemaakt, en kan de gebruiker de gegevens van het volgende boek ingeven. Dit gaat zo door tot er evenveel titels werden ingegeven als het aantal dat de gebruiker vooraf heeft ingegeven. Wanneer alle titels ingegeven werden, verschijnt er in een nieuw formuliertje het hiernaast afgebeelde factuurtje op het scherm, waarin uiteraard de ingevoerde gegevens weergegeven worden, en de verschillende totale berekend. Door op de knop Stop te klikken, wordt het programma afgesloten. Door op de tweede knop te klikken, wordt het formuliertje met het factuur gesloten, en kan de gebruiker opnieuw gegevens ingeven. Bewaar het project met als naam oef16

Oefening 17

Maak een programma om de lottotrekking te controleren. De gebruiker geeft eerst in een apart formuliertje 5 reeksen van 6 getallen tussen 1 en 42 in. Indien de gebruiker een groter of kleiner getal wil ingeven, verschijnt een foutmelding op het scherm. Nadat de vijf reeksen werden ingegeven, kan de gebruiker op een knop Trekking klikken. De computer genereert nu de 6 willekeurige getallen tussen 1 en 42 van de trekking let op : hetzelfde getal mag slechts n keer in de reeks voorkomen! In een nieuw formuliertje wordt eerst de reeks van de trekking getoond. Daarna worden de vijf ingegeven reeksen getoond, en wordt bij elke reeks aangegeven hoeveel cijfers uit de trekking ook voorkomen in de reeks. Bewaar het project met als naam oef17.

106

www.marcgoris.be

Programmeren in Visual Basic

10. Foutafhandeling
10.1. Soorten fouten

Tijdens het programmeren maak je als programmeur vaak fouten waardoor het programma niet of niet correct werkt. Bovendien is het in sommige programmas mogelijk dat de gebruiker door een verkeerde invoer een fout veroorzaakt. Er bestaan 3 soorten fouten :

Syntax-fouten

Run time fouten

Logische fouten

10.2.

Fouten opsporen

Fouten spoor je in de eerste plaats op door het programma uit te testen. Daarbij kunnen fouten op drie manieren aan het licht komen : 1. Het programma weigert op te starten. Er wordt een codevenster getoond, waarin de fout wordt gemarkeerd. Bovendien wordt in een aparte message box de fout bondig omschreven. Dit gebeurt echter enkel indien in de opties van Visual Basic (menu Tools Options) de optie Auto syntax check is aangevinkt. 2. Het programma start wel op, maar in de loop van het programma treedt er een fout op. Er verschijnt een foutmelding op het scherm. Met de knop Debug wordt het codevenster getoond, en wordt de regel waarin de fout voorkomt geel gemarkeerd.

3. Het programma start wel op, en kan gewoon uitgevoerd worden. Het resultaat is echter fout.

www.marcgoris.be

107

Programmeren in Visual Basic

Belangrijke veiligheidsvoorschriften ! Sommige fouten zoals bijvoorbeeld eindeloze lussen in herhaalstructuren maken dat je het programma niet meer op een normale wijze kunt afsluiten. In het beste geval kan je het programma onderbreken met de toetsencombinatie Ctrl + Break. Erger wordt het wanneer je niet anders kan dan Visual Basic af te sluiten. In het slechtste geval loopt de computer vast, en dien je opnieuw op te starten. In de laatste twee gevallen ben je je werk onherroepelijk kwijt. Daarom een gouden tip : bewaar altijd je werk alvorens het programma uit te testen. Als er dan iets misloopt, heb je tenminste niet voor niets gewerkt. Vaak gebeurt het dat je een schrijffout maakt in de naam van een gegeven. Het programma zal het fout geschreven gegeven dan aanzien als een nieuw gegeven, en dat leidt onvermijdelijk tot fouten. Om dit te voorkomen schakel je het verplicht declareren van variabelen best in (zie onderaan blz. 22). Soms is het moeilijk om je fout op te sporen. Het is dan handig als je kan zien welke stappen de computer zet bij het uitvoeren van het programma. Daarvoor bestaat de procedure step into : Open de programmacode van een Visual Basic programma. Klik in het menu Debug en kies de optie Step Into. OF Druk op de F8-toets OF Open de Debug-werkbalk (menu View Toolbars Debug) en klik op het Step into-icoontje.

Het programma wordt nu gestart alsof je het programma gewoon uitvoert. Je krijgt de mogelijkheid om een gebruikersactie te ondernemen (vb. een gegeven invoeren of op een knop klikken). Wanneer het programma echter programmacode moet beginnen uitvoeren, verschijnt het codevenster, en wordt de stap die op dat ogenblik wordt uitgevoerd, geel gemarkeerd. Door nu telkens op de F8-toets te drukken (of op het Step Into-icoontje in de Debug-werkbalk te klikken) zie je welke stap het programma vervolgens neemt. Je kan zo stap voor stap volgen op welke manier de programmacode wordt doorlopen, waardoor je makkelijker een fout kan opsporen. Je kan ook de procedure Step Over (Shift + F8) gebruiken om het programma in verschillende stappen uit te laten voeren, maar de stappen worden dan groter : nu worden immers niet de aparte opdrachten maar hele subprocedures in n stap uitgevoerd. Indien je wil dat bij het uitvoeren van het programma een bepaalde programmaregel wordt overgeslagen, kan je die regel met een breakpoint markeren : Zet de cursor in de programmaregel die je wenst over te slaan bij het uitvoeren van het programma. Kies uit het menu Debug de optie Toggle Breakpoint OF Druk op de toets F9 OF Klik op het icoontje Toggle Breakpoint in de werkbalk Debug (dit is het icoontje met het handje).

108

www.marcgoris.be

Programmeren in Visual Basic

Een breakpoint weer verwijderen, doe je door de cursor opnieuw in die programmaregel te zetten, en opnieuw te drukken op de knop F9 (of het icoontje Toggle Breakpoint in de Debug-werkbalk aan te klikken). Indien je meerdere breakpoints hebt gezet, kan je die in n keer verwijderen met de optie Clear All Breakpoints uit het menu Debug. Vaak is het handig om tijdens het uitvoeren van het programma de waarde van n of meer gegevens te kunnen bekijken in de verschillende stappen van het programma. Daarvoor kunnen we in het programma zgn. watches plaatsen : Zet de cursor op de naam van het gegeven waarvan je de waarde wil bekijken tijdens het uitvoeren van het programma. Klik nu in het menu Debug op de optie Add Watch. In een nieuw dialoogvenster kan je nu je watch verder aanpassen. Bovenaan in het venster geef je in van welk gegeven je de waarde wil bekijken. Standaard is dat het gegeven waarop de cursor stond op het ogenblik dat je het dialoogvenster opende. Onderaan in het dialoogvenster kan je aangeven wanneer het uitvoeren van het programma moet onderbroken worden, opdat je de waarde van het gegeven kunt bekijken. Voer nu het programma uit. Je merkt dat onderaan het scherm een nieuw venster verschijnt (het Watches-venster), waarin je de waarde van je gegeven kan aflezen :

Met een Quick watch kan je tijdens het uittesten van je programma op eender welk ogenblik de waarde van eender welk gegeven bekijken : Test het programma uit met Step Into of Step over. Zet de cursor op de naam van het gegeven waarvan je de waarde wil bekijken. Kies je de optie Quick Watch uit het menu Debug OF Druk je op de toetsencombinatie Ctrl + F9 OF klik je op de knop Quick Watch van de Debugwerkbalk. Er verschijnt een nieuw venstertje, waarin je de waarde van het gegeven kan aflezen : Maar eigenlijk hoeft het niet eens zo omslachtig. Houd de cursor gewoon even stil over de naam van een gegeven, en in een informatievenstertje verschijnt eveneens de waarde van het gegeven :

www.marcgoris.be

109

Programmeren in Visual Basic

Een andere manier om de waarden van je gegevens te bekijken tijdens het stap voor stap uitvoeren van het programma, is het gebruik maken van het Locals window. Daarin verschijnen de waarden van alle lokale variabelen in een subprocedure. Je kan het Locals Windows openen in het menu View de optie Locals Window aan te klikken. Je kan ook klikken op het Locals Window-icoontje in de Debug-werkbalk :

In het Locals window wordt een overzicht getoond van alle lokale variabelen in de subprocedure die op dat ogenblik uitgevoerd wordt :

Tenslotte kan je een programma nog gedeeltelijk laten uitvoeren. Wanneer je bijvoorbeeld weet dat een fout zich voordoet in een van de eerste subprocedures, kan je bepalen dat het programma maar moet getest worden tot op een bepaalde plaats. Je gaat dan als volgt te werk : Zet de cursor op een programmaregel in het codevenster tot waar je het programma wil uitvoeren. Klik daarna in het menu Debug op de optie Run to cursor. Het programma wordt nu uitgevoerd tot op de plaats waar je de cursor had gezet. 10.3. Fouten opvangen in het programma

Wanneer een gebruiker een foute waarde invoert, kan je die fout opvangen in het programma. Dat kan eenvoudigweg in de programmacode. Je moet dan wel vooraf bedenken welke fouten de gebruiker kan maken, en hoe je ze opvangt. Enkele voorbeelden uit programmas die we reeds gemaakt hebben : ... If (bytAantal > 10 Or bytAantal < 1) Then For intTeller = 0 To 9 txtNaam(intTeller).Visible = False Next intTeller intTeller = MsgBox("U dient een waarde tussen 1 en 10 in te geven!", vbExclamation, "Invoerfout") txtAantal.Text = "" txtAantal.SetFocus ... ...
Select Case True Case txtGetal.Text = "" strResultaat = "Vul eerst een getal in!" Case Not (IsNumeric(txtGetal.Text)) strResultaat = "U mag enkel een getal invoeren!"

...

110

www.marcgoris.be

Programmeren in Visual Basic

...
Do intTeller = intTeller + 1 If intTeller > 20 Then Exit Do End If

... Private Function WilGetal(lng1 As Long, lng2 As Long) As Long Randomize If lng2 < lng1 then Exit Function End if WilGetal = (Rnd * (lng2 - lng1)) + lng1 End Function

Speciale functies om fouten op te vangen Vaak vraag je de gebruiker om een bepaalde waarde in te voeren, bijvoorbeeld een getal. In een textbox kan een gebruiker echter eender wat ingeven : getallen, tekst, datums, Wanneer je dan later bewerkingen op die waarde wil uitvoeren, en de gebruiker heeft in plaats van een getal een tekst ingegeven, zal het programma ofwel een run-time fout genereren, ofwel een fout resultaat weergeven. Om dit soort invoerfouten te vermijden, kunnen we gebruik maken van speciale functies : IsNumeric : geeft aan of de ingevoerde waarde numeriek is (zie blz. 29 onder Numerieke functies) IsDate : geeft aan of de ingevoerde waarde een datum of een tijd is IsArray : geeft aan of een parameter een array is of niet. IsMissing : geeft aan of een optionele parameter ontbreekt of niet. Al deze functies genereren een booleaanse waarde (True of False). Een voorbeeld van hoe ze te gebruiken vind je in het tweede voorbeeld op de vorige bladzijde.

Heel wat fouten kunnen opgevangen worden met de opdracht On Error. Dit soort fouten worden Trappable errors genoemd. Wanneer het programma een fout tegenkomt, kan je een speciale actie voorzien : On Error goto : hiermee verwijs je naar een stuk programmacode in je subprocedure die je een naam geeft. In het voorbeeld op de volgende bladzijde is dat Fout. Resume next : hiermee geef je aan dat het programma de regel waarin de fout staat moet negeren, en verder moet gaan met de volgende opdracht. Deze opdracht is de laatste in de foutafhandeling in het voorbeeld op de volgende bladzijde. Err.Number : dit geeft het nummer weer van de fout die zich heeft voorgedaan. Err.Description : dit geeft de omschrijving weer van de fout die zich heeft voorgedaan. Helaas is die omschrijving steeds in het Engels, en is ze vaak voor gewone gebruikers onverstaanbaar.

www.marcgoris.be

111

Programmeren in Visual Basic

... Private Sub cmdToon_Click() Dim intTeller As Integer Dim bytAantal As Byte Dim strFout As String On Error GoTo Fout bytAantal = Val(txtAantal.Text) For intTeller = 0 To bytAantal - 1 txtNaam(intTeller).Visible = True Next intTeller cmdSorteren.Visible = True cmdLeegmaken.Visible = True Fout: strFout = Str(Err.Number) & : & Err.Description intTeller = MsgBox(strFout, vbExclamation, "Fout") Resume Next End Sub ... De lijst met trappable errors kan je makkelijk opvragen via de helpfunctie van Visual Basic. Je kan dan voor elke foutmelding nagaan wat de fout precies is door op de omschrijving te klikken. Uiteraard is die verklaring wel volledig in het Engels.

112

www.marcgoris.be

Programmeren in Visual Basic

Je kan het de gebruiker makkelijker maken door een aantal fouten te voorzien. Zo kan je gebruik maken van de error numbers om een verklaring bij een bepaalde fout te geven. Een voorbeeld : Load frmFactuur On Error goto Fout FrmFactuur.Show Fout: If Err.Number = 360 then strFout = Het formulier is reeds geopend. IntTeller = MsgBox(strFout, vbExclamation, "Fout") Exit sub End sub ...

10.4.

Oefening

Bekijk eerst even opnieuw alle oefeningen die je tot nu toe hebt gemaakt. Zorg ervoor dat eventuele foute invoer door de gebruiker en fouten in de loop van je programma correct worden opgevangen.

Oefening 18

Maak een programma om het verschil te berekenen tussen twee waarden. De gebruiker geeft in een eerste scherm in of hij cijferwaarden, tekstwaarden, datums of tijden wil ingeven. Afhankelijk van die keuze wordt een volgend scherm geopend waarin de gebruiker gevraagd wordt de twee waarden in te geven. Het programma controleert of de gegevens correct werden ingevoerd (m.a.w. in geval van cijfers dat er wel degelijk cijferwaarden werden ingegeven). Indien dit niet zo is, verschijnt een foutmelding op het scherm, wordt het formulier gesloten en moet de gebruiker opnieuw een keuze maken. Indien de gebruiker voor cijferwaarden koos, wordt het absolute verschil tussen de twee cijfers berekend en in hetzelfde formulier weergegeven. Indien de gebruiker voor tekstwaarden koos, wordt het absolute verschil in de lengte van de ingegeven tekstwaarden weergegeven. Indien de gebruiker koos voor datums wordt het absolute verschil in aantal dagen tussen de twee datums weergeven. Indien de gebruiker koos voor tijden, wordt het absolute verschil in seconden tussen de twee tijden weergegeven. Zorg ervoor dat alle fouten in het programma correct worden opgevangen. Bewaar het project met als naam oef18.

www.marcgoris.be

113

Programmeren in Visual Basic

11. Werken met bestanden


Van programmas die we tot nog toe maakten, blijft niets bewaard nadat we het programma afsluiten. In vele gevallen is het echter wenselijk om bepaalde resultaten te kunnen bewaren op een gegevensdrager (harde schijf of diskette), om ze later weer te kunnen oproepen. Het bewaren van gegevens uit Visual Basic-programmas kan in verschillende vormen : Sequentile bestanden zijn bestanden waarbij alle gegevens doorlopen worden om een welbepaald gegeven op te sporen. Random bestanden zijn bestanden waarbij gegevens onmiddellijk bereikt worden zonder alle andere te moeten doorlopen. Toepassingsbestanden van andere (Microsoft-)programmas, zoals Word-documenten, Excelrekenbladen of databases in Access. 11.1 Sequentile bestanden

Maak een programma om een lijst bij te houden van de vakken die je hebt, en een tweede lijst voor de namen van de leerkrachten die die vakken geven. De gegevens uit beide lijsten worden in twee aparte bestanden (vakken.txt en lkr.txt) bewaard. Het programma maakt het mogelijk om de lijsten op te roepen en in twee listboxes weer te geven, items te bewerken, toe te voegen of te verwijderen. Op het formulier (zie afbeelding) komt een knop voor om nieuwe lijsten te maken, bestaande lijsten te openen, en eentje om de wijzigingen te bewaren. Maak het programma gebruiksvriendelijk en bewaar het met als naam vb11.

Object

Type

Naam

Eigensch.

Waarde

formulier Label Vakken Label Leerkrachten Lijst Vakken Lijst Leerkrachten

Formulier Label Label Listbox Listbox

frmVb11 lblVakken lblLeerkrachten lstVakken lstLeerkrachten cmdNieuw cmdOpen cmdBewaren

Caption Caption Caption Caption Style Picture Caption Style Picture Caption Style Picture

Vakken Leerkrachten Graphical Icon Graphical Icon Graphical Icon

Knop Nieuwe lijsten Command button Knop Lijst openen Command button

Knop Lijst bewaren Command button


114

www.marcgoris.be

Programmeren in Visual Basic

Object

Type

Naam

Eigensch.

Waarde

Kader bewerkingen Optie toevoegen Optie wijzigen Optie Verwijderen Knop Uitvoeren Label nieuw vak Label nieuwe lkr Textbox Nieuw Vak

Frame Option button Option button Option button Command button Label Label Textbox

Label Nieuwe Waarde Textbox Textbox Nieuwe Waarde Label wijzigen Textbox Label

Caption Caption Caption Caption Caption cmdUitvoeren Style Picture Caption lblNieuwVak Visible Caption lblNieuweLkr Visible Text txtNieuwVak Visible Text lblNieuweWaarde Visible Text txtNieuweWaarde Visible lblWijzigen Caption Visible

fraBewerkingen optToevoegen optWijzigen optVerwijderen

Label verwijderen

Label Command button Command button

LblVerwijderen

Caption Visible Caption Style Picture Caption Style Picture

Knop Leegmaken Knop Stoppen

cmdLeegmaken cmdStoppen

Bewerkingen Toevoegen Wijzigen Verwijderen Graphical Icon Geef het nieuwe vak: False Geef de nieuwe leerkracht: False False Geef de nieuwe waarde: False False Selecteer eerst het te wijzigen gegeven in de bovenstaande lijst False Selecteer het te verwijderen gegeven uit de bovenstaande lijst, en klik dan op de knop. False Graphical Icon Graphical Icon

www.marcgoris.be

115

Programmeren in Visual Basic

De eerste stap is het aanmaken van een nieuwe lijst. Bij het klikken op de knop voor het openen van een nieuwe lijst moet het volgende gebeuren : De twee listboxes moeten leeggemaakt worden. De optie Toevoegen wordt geactiveerd. De nodige controls voor het toevoegen van gegevens aan de lijsten worden zichtbaar gemaakt. Private Sub cmdNieuw_Click() 'Lijsten leegmaken lstVakken.Clear lstLeerkrachten.Clear 'Optie Toevoegen activeren optToevoegen.Value = True 'De juiste controls weergeven voor het toevoegen lblNieuwVak.Visible = True lblNieuweLeerkracht.Visible = True lblWijzigen.Visible = False lblNieuweWaarde.Visible = False lblVerwijderen.Visible = False txtNieuwVak.Visible = True txtNieuw.Visible = True End Sub Vervolgens kan de gebruiker een naam van een vak en een leerkracht ingeven. Door op de knop Uitvoeren te klikken, worden de naam van het vak en de naam van de leerkracht toegevoegd aan de lijst. Deze knop kan echter eveneens gebruikt worden voor het wijzigen of verwijderen van gegevens. Daarom zetten we de programmacode voor het toevoegen van items in een aparte subprocedure, die aangeroepen wordt indien de option button Toevoegen actief is. Hetzelfde doen we voor het wijzigen of verwijderen van gegevens. Wanneer de gebruiker op deze knop klikt moet natuurlijk wel een bewerking gekozen zijn. Is dat niet het geval, dan verschijnt een foutmelding. Private Sub cmdUitvoeren_Click() Dim strFout As String Dim strTitel As String Dim intFout As Integer 'De juiste subprocedure aanroepen bij de keuze van de gebruiker Select Case True Case optToevoegen Toevoegen Case optWijzigen Wijzigen Case optVerwijderen Verwijderen 'Foutmelding indien geen bewerking werd gekozen Case Else strTitel = "Selectiefout" strFout = "U moet eerst een bewerking kiezen!" intFout = MsgBox(strFout, 48, strTitel) End Select End Sub

116

www.marcgoris.be

Programmeren in Visual Basic

Vervolgens schrijven we de subprocedure Toevoegen, waarin de ingevulde gegevens worden toegevoegd aan de lijsten. Uiteraard willen we de gebruiker behoeden voor fouten : lege strings kunnen niet worden toegevoegd, en dus verschijnt er in dat geval een foutmelding. Private Sub Toevoegen() Dim Dim Dim Dim Dim strVak As String strLkr As String strFout As String strTitel As String intFout As Integer

strTitel = "Invoerfout" 'Foutmelding bij een lege string If txtNieuwVak.Text = "" Then strFout = "Je moet een vak ingeven!" intFout = MsgBox(strFout, 48, strTitel) txtNieuwVak.SetFocus Else If txtNieuw.Text = "" Then strFout = "Je moet een leerkracht ingeven!" intFout = MsgBox(strFout, 48, strTitel) txtNieuw.SetFocus Else 'Toevoegen van de waarden aan de lijst, en tekstvakken leegmaken strVak = txtNieuwVak.Text strLkr = txtNieuw.Text lstVakken.AddItem strVak lstLeerkrachten.AddItem strLkr txtNieuwVak.Text = "" txtNieuw.Text = "" txtNieuwVak.SetFocus End If End If End Sub

De gebruiker kan eveneens kiezen voor het verwijderen van een item uit de lijst. Uiteraard moet bij het verwijderen van een vak de naam van de betrokken leerkracht eveneens verwijderd worden, en andersom, moet bij het verwijderen van een leerkracht ook het vak verwijderd worden. Bovendien mag de gebruiker ofwel enkel het vak of de leerkracht selecteren, ofwel de oveerkomstige leerkracht bij het vak. Het verwijderen van een vak n een andere leerkracht tegelijk mag natuurlijk niet. Private Sub Verwijderen() Dim Dim Dim Dim Dim intFout As Integer intKeuze As Integer strFout As String strTitel As String strKeuze As String

Select Case True 'Foutmelding indien geen selectie werd gemaakt Case (lstVakken.ListIndex = -1 And lstLeerkrachten.ListIndex = -1) strTitel = "Selectiefout" strFout = "U moet minstens een vak of een leerkracht selecteren!" intFout = MsgBox(strFout, 48, strTitel)

www.marcgoris.be

117

Programmeren in Visual Basic

'Verwijderen van een vak indien er een vak werd geselecteerd Case (lstVakken.ListIndex <> -1 And lstLeerkrachten.ListIndex = -1) strTitel = "Verwijderen bevestigen" strKeuze = "Wilt u " & lstVakken.List(lstVakken.ListIndex) & " werkelijk verwijderen?" intKeuze = MsgBox(strKeuze, 36, strTitel) If intKeuze = 6 Then lstLeerkrachten.RemoveItem lstVakken.ListIndex lstVakken.RemoveItem lstVakken.ListIndex End If 'Verwijderen van een vak indien er een leerkracht werd geselecteerd Case (lstLeerkrachten.ListIndex <> -1 And lstVakken.ListIndex = -1) strTitel = "Verwijderen bevestigen" strKeuze = "Wilt u " & lstLeerkrachten.List(lstLeerkrachten. ListIndex) & " werkelijk verwijderen?" intKeuze = MsgBox(strKeuze, 36, strTitel) If intKeuze = 6 Then lstVakken.RemoveItem lstLeerkrachten.ListIndex lstLeerkrachten.RemoveItem lstLeerkrachten.ListIndex End If 'Foutmelding indien geen overeenkomstige selectie werd gemaakt Case lstVakken.ListIndex <> lstLeerkrachten.ListIndex strTitel = "Selectiefout" strFout = "U mag enkel de overeenkomstige leerkracht selecteren!" intFout = MsgBox(strFout, 48, strTitel) 'Verwijderen van een vak indien beiden werden geselecteerd Case Else strTitel = "Verwijderen bevestigen" strKeuze = "Wilt u dit vak werkelijk verwijderen?" intKeuze = MsgBox(strKeuze, 36, strTitel) If intKeuze = 6 Then lstLeerkrachten.RemoveItem lstVakken.ListIndex lstVakken.RemoveItem lstVakken.ListIndex End If End Select End Sub

Wanneer de gebruiker de waarde van een item wil wijzigen, wordt de oude waarde eerst gewist, en wordt de nieuwe waarde toegevoegd op dezelfde plaats. Uiteraard moet de gebruiker de nieuwe waarde eerst ingeven, en verschijnt er een foutmelding indien er geen nieuwe waarde werd ingegeven. Bovendien kan er slechts n gegeven worden gewijzigd ; de gebruiker mag dus niet tegelijk een vak en een leerkracht selecteren. Gebeurt dit wel, dan verschijnt er een foutmelding, en wordt de dubbele selectie ongedaan gemaakt.

118

www.marcgoris.be

Programmeren in Visual Basic

Private Sub Wijzigen() Dim Dim Dim Dim Dim Dim intFout As Integer intKeuze As Integer strFout As String strTitel As String strKeuze As String strNieuw As String

strNieuw = txtNieuw.Text Select Case True 'Foutmelding indien geen nieuwe waarde werd ingevoerd Case strNieuw = "" strTitel = "Invoerfout" strFout = "Je moet een nieuw vak of een nieuwe leerkracht ingeven!" intFout = MsgBox(strFout, 48, strTitel) txtNieuw.SetFocus 'Foutmelding indien geen selectie werd gemaakt Case (lstVakken.ListIndex = -1 And lstLeerkrachten.ListIndex = -1) strTitel = "Selectiefout" strFout = "U moet minstens een vak of een leerkracht selecteren!" intFout = MsgBox(strFout, 48, strTitel) 'Foutmelding indien er een dubbele selectie werd gemaakt Case (lstVakken.ListIndex <> -1 And lstLeerkrachten.ListIndex <> -1) strTitel = "Selectiefout" strFout = "U mag alleen een vak of alleen een leerkracht selecteren!" intFout = MsgBox(strFout, 48, strTitel) lstVakken.ListIndex = -1 lstLeerkrachten.ListIndex = -1 'Vervanging van een vak Case lstVakken.ListIndex <> -1 strTitel = "Vervanging" strKeuze = "Wilt u dit vak werkelijk vervangen?" intKeuze = MsgBox(strKeuze, 36, strTitel) If intKeuze = 6 Then intPlaats = lstVakken.ListIndex lstVakken.RemoveItem intPlaats lstVakken.AddItem strNieuw, intPlaats End If 'Vervanging van een leerkracht Case Else strTitel = "Vervanging" strKeuze = "Wilt u deze leerkracht werkelijk vervangen?" intKeuze = MsgBox(strKeuze, 36, strTitel) If intKeuze = 6 Then intPlaats = lstLeerkrachten.ListIndex lstLeerkrachten.RemoveItem intPlaats lstLeerkrachten.AddItem strNieuw, intPlaats End If End Select End Sub

www.marcgoris.be

119

Programmeren in Visual Basic

Samenvatting : bewerkingen op lijsten De plaats van een item in een lijst : lstLijstnaam.ListIndex Indien geen item geselecteerd is, is de listindex gelijk aan 1 Het eerste item in een lijst heeft als lijstindex 0, de tweede 1, enz. Het aantal items in een lijst : lstLijstnaam.ListCount Een item toevoegen aan een lijst : lstLijstnaam.AddItem strItem Op deze manier wordt een item toegevoegd aan het einde van de lijst. Wil je het item op een specifieke plaats invoegen, dan voeg je er de lijstindex aan toe : lstLijstnaam.AddItem strItem, intPlaats Waarbij intPlaats de waarde heeft van de lijstindex van het item. Een item verwijderen uit een lijst : lstLijstnaam.RemoveItem intPlaats Waarbij intPlaats de waarde heeft van de lijstindex van het item. Een item wijzigen uit een lijst doe je door eerst de oorspronkelijke waarde te verwijderen, en vervolgens de nieuwe waarde toe te voegen. De waarde van een item uit een lijst kan je oproepen op de volgende manier : LstLijstnaam.list(intPlaats) Waarbij intPlaats de waarde heeft van de lijstindex van het item. Het is de bedoeling dat beide lijsten elk in een tekstbestand worden bewaard. De lijst met vakken wordt bewaard in het bestand vakken.txt op een diskette, de lijst met leerkrachten wordt bewaard als lkr.txt. Nadat de bestanden geopend worden en daarbij een nummer krijgen worden de items uit de de lijst in een herhaalstructuur naar de bestanden geschreven. Er wordt in een foutmelding voorzien als er geen diskette geplaatst is. Private Sub cmdBewaren_Click() Dim Dim Dim Dim intTeller As Integer strMelding As String strTitel As String strFout As String

'Foutmelding als er geen diskette geplaatst is On Error GoTo Fout 'De bestanden openen voor bewaren Open "a:vakken.txt" For Output As #1 Open "a:lkr.txt" For Output As #2 'Het schrijven van de waarden in de bestanden For intTeller = 0 To lstVakken.ListCount - 1 Print #1, lstVakken.List(intTeller) Print #2, lstLeerkrachten.List(intTeller) Next intTeller

120

www.marcgoris.be

Programmeren in Visual Basic

'De bestanden sluiten Close #1, #2 strMelding = "De gegevens werden bewaard." strTitel = "Bewaren" intTeller = MsgBox(strMelding, 64, strTitel) Exit Sub Fout: strTitel = "Diskettefout" If Err.Number = 71 Then strFout = "Geen diskette in het diskettestation!" Else strFout = "Onbekende fout. De gegevens werden niet bewaard." End If intTeller = MsgBox(strFout, 16, strTitel) Exit Sub End Sub

Met de knop Openen worden lijsten geopend die zich in twee bestanden bevinden op de diskette. Ook hier weer worden de nodige foutmeldingen voorzien indien er geen diskette werd geplaatst, of indien de bestanden zich niet op de diskette bevinden : Private Sub cmdOpen_Click() Dim strVak As String Dim strLeerkracht As String 'Foutmelding On Error GoTo Fout 'de lijsten leegmaken lstVakken.Clear lstLeerkrachten.Clear 'De bestanden openen Open "a:vakken.txt" For Input As #1 Open "a:lkr.txt" For Input As #2 'Het lezen van de waarden uit de bestanden Do While Not EOF(1) Input #1, strVak Input #2, strLeerkracht lstVakken.AddItem strVak lstLeerkrachten.AddItem strLeerkracht Loop 'De bestanden sluiten Close #1, #2 Exit Sub

www.marcgoris.be

121

Programmeren in Visual Basic

Fout: strTitel = "Diskettefout" If Err.Number = 71 Then strFout = "Geen diskette in het diskettestation!" Else If Err.Number = 53 Then strFout = "Bestand staat niet op deze diskette." Else strFout = "Onbekende fout. Het bestand kan niet worden geopend." End If End If intTeller = MsgBox(strFout, 16, strTitel) Exit Sub End Sub

Samenvatting : werken met sequentile bestanden Openen van bestanden voor : Inlezen : Toevoegen : Bewaren : Open bestand for Input as # 1 Open bestand for Append as # 1 Open bestand for Output as # 1

Bestanden worden genummerd. Je kan hiervoor vrij een nummer kiezen tussen 1 en 511. Voor het schrijven van de items in het bestand, bestaan twee mogelijkheden : Write #1, lstLijst.List(intTeller) items worden tussen aanhalingstekens geschreven Print #1, lstLijst.List(intTeller) items worden zonder aanhalingstekens geschreven Herhalen tot het einde van een bestand : For intTeller = 0 to lstLijst.ListCount 1 Het aantal items in de lijst kan vooraf bepaald worden Do While Not EOF Het aantal items in de lijst is vooraf onbekend (EOF = End of file) Sluiten van de bestanden : Close #1, #2,

Oefening Maak een programma voor magazijnbeheer van een uitgeverij, waarbij de resultaten worden bewaard in sequentile bestanden op een diskette. Van elk boek moet de titel, de auteur en het aantal exemplaren in voorraad worden bewaard. Je bent volledig vrij in de layout van het programma, en of je met n dan wel met meerdere schermen wil werken. Zorg ervoor dat de gegevens in lijsten worden weergegeven, en dat nieuwe items kunnen worden toegevoegd, verwijderd en gewijzigd. Op het scherm verschijnt altijd hoeveel verschillende titels en hoeveel boeken er in totaal voorradig zijn. Zorg ervoor dat het programma gebruiksvriendelijk is en dat mogelijke fouten correct worden opgevangen. Bewaar het project met als naam Oef19.

122

www.marcgoris.be

Programmeren in Visual Basic

11.2

Random bestanden

Random bestanden verschillen in die zin van sequentile bestanden, dat in een random bestand rechtstreeks kan geschreven worden naar of gelezen worden uit een bepaalde record, zonder dat de andere records eerst moeten doorlopen worden. Random bestanden hebben een aantal voordelen tegenover sequentile bestanden : Het lezen en schrijven van en naar een bestand gaat veel sneller, aangezien niet telkens een reeks gegevens moet worden doorlopen. Sequentile bestanden zijn beperkt tot het bewaren van gegevens in tekstvorm. Numerieke gegevens in een sequntieel bestand worden als tekstwaarde bewaard, en moeten door Visual Basic telkens eerst omgezet worden naar een numeriek formaat. Dat is niet nodig bij random bestanden, waar de gegevens in binary format (wat wil zeggen in eender wel gegevenstype) worden bewaard. Sequentile bestanden nemen meer schijfruimte in beslag dan random bestand, als er veel numerieke gegevens dienen te worden bewaard. Een getal als 1 234 567 890 beslaat in een sequentieel bestand immers 10 bytes (een byte voor elk teken), terwijl het bewaren van het getal als een lange integer in een random bestand slechts 4 bytes nodig heeft. Als voorbeeld maken we een programma waarmee we een factuurtje kunnen berekenen. Op het factuur kunnen we artikels toevoegen, verwijderen en aanpassen, en er wordt een totaalprijs berekend.

Werken met records Random-bestanden zijn net als databanken opgebouwd uit records. Die records moet je nog wel zelf definiren. Net als bij variabelen geldt dat records die in het ganse project beschikbaar moeten zijn, globaal worden gedefinieerd in een aparte module. Indiend de record enkel binnen n formulier gekend moeten zijn, kan ze gedefinieerd worden gedefinieerd worden in het formulier zelf, maar in de praktijk zal dat weinig voorkomen. We definiren van een recordtype in een nieuwe module Main : Type Artikel intNummer as Integer strNaam as String * 25 sngEenheidsprijs as Single intAantal as Integer sngSubtotaal as Single End Type De verschillende elementen in een record worden velden genoemd. De record uit ons voorbeeld bestaat dus uit 5 velden. Deze mogen allemaal van een verschillend gegevenstype zijn, maar dat moet natuurlijk niet. Voor strings moet je wel een vaste lengte bepalen, zodat elke record precies even lang wordt. Dat is nodig om fouten te vermijden bij het lezen uit een record. Toegang tot random bestanden kan immers enkel indien alle records even lang zijn. Om de record te gebruiken moet je eerst nog een variabele declareren, waarbij je eveneens een naam voorziet als positiewaarde : Dim recArtikel as Artikel Verder in het programma gaan we gebruik maken van de variabele recArtikel die van het type Artikel is, en dus de vijf velden bevat die we in het type bepaald hadden.

www.marcgoris.be

123

Programmeren in Visual Basic

Records toevoegen aan een random bestand Ontwerp eerst het hier afgebeelde formuliertje. Het zal verder in dit voorbeeld deel uitmaken van een groter project, waarbij dit formuliertje zal gebruikt worden om records toe te voegen aan een random bestand.

Object

Type

Naam

Eigensch.

Waarde

formulier Label Nummer Label Artikel Label Eenheidsprijs Label Aantal Label Subtotaal Textbox Nummer Textbox Artikel Textbox Eenheidsprijs Textbox Aantal Textbox Subtotaal Label euro (1) Label euro (2) Knop Toevoegen Knop Stoppen

Formulier Label Label Label Label Label Textbox Textbox Textbox Textbox Textbox Label Label

frmToevoegen lblNr lblArt lblEenheidsprijs lblAantal lblSubtotaal txtNr txtArt txtEenheidsprijs txtAantal txtSubtotaal lblEuro1 lblEuro2

Command button cmdToevoegen Command button cmdStoppen

Caption Caption Caption Caption Caption Caption Text Enabled Text Text Text Text Caption Caption Caption Enabled Caption

Record toevoegen Nummer Artikel Eenheidsprijs Aantal Subtotaal (leeg) False (leeg) (leeg) (leeg) (leeg) Record Toevoegen False Stoppen

Bij het laden van het formulier dienen al een aantal dingen te gebeuren : Het bestand waar naartoe moet geschreven worden, moet worden geopend voor random access. Het bestand krijgt, net als bij sequentile bestanden een nummer. Indien het bestand nog niet bestaat, wordt het aangemaakt. De positie van de laatste record wordt gezocht. We gaan immers de nieuwe records toevoegen na de reeds bestaande. We leren verder nog hoe je records kan tussenvoegen. Het artikelnummer wordt reeds ingevuld. Dit nummer is hetzelfde nummer als de positie van de record in het bestand, en zal later dienen om het record snel te kunnen opzoeken.

124

www.marcgoris.be

Programmeren in Visual Basic

Dim recArtikel As Artikel Dim intPositie As Integer Private Sub Form_Load() Dim intLaatste As Integer ' Het openen van het random bestand Open "d:\artikel.dat" For Random As #1 ' De positie zoeken van de laatste record Do While Not EOF(1) Get #1, , recArtikel Loop intLaatste = Seek(1) - 1 intPositie = intLaatste ' De positie van de laatste record invullen ' in de textbox voor het artikelnummer txtNr.Text = Str(intLaatste) End Sub Get : het oproepen van een bepaalde record uit een bestand. Het commando wordt steeds gevolgd door drie argumenten : het bestandsnummer de positie van de record in het bestand (dit is optioneel in het voorbeeld wordt het gewoon weggelaten) de naam van de variabele die verwijst naar het record zoals je het had gedefinieerd. Merk op dat het bestand dat we nu gebruiken, niet de extensie .txt heeft, maar wel als extensie .dat. In principe zou je eender welke bestandsextensie kunnen gebruiken, maar let wel op dat je geen bekende bestandsextensies gebruikt, die verbonden zijn aan andere computerprogrammas (zoals .exe, .xls, .doc, enz.). Bestanden met de extensie .dat worden algemeen gebruikt voor gegevensbestanden. Wanneer de gebruiker het aantal ingeeft, wordt het subtotaal automatisch berekend en ingevuld. Pas dan wordt ook de knop Record toevoegen beschikbaar. Het is immers normaal dat een record pas kan toegevoegd worden wanneer er een subtotaal berekend is. Private Sub txtAantal_Change() Dim sngEenheidsprijs As Single Dim intAantal As Integer Dim sngSubtotaal As Single ' Het subtotaal berekenen en weergeven sngEenheidsprijs = Val(txtEenheidsprijs.Text) intAantal = Val(txtAantal.Text) sngSubtotaal = sngEenheidsprijs * intAantal txtSubtotaal.Text = Str(sngSubtotaal) ' De knop "toevoegen" beschikbaar maken cmdToevoegen.Enabled = True End Sub

www.marcgoris.be

125

Programmeren in Visual Basic

Bij het klikken op de knop Record toevoegen dienen de waarden in textboxes toegevoegd te worden aan de record, en de record dient toegevoegd te worden aan het bestand. Daarna worden de textboxes weer leeggemaakt om een nieuwe record te kunnen ingeven. Private Sub cmdToevoegen_Click() ' De textbox Nummer krijgt de waarde van de positie in de record intPositie = intPositie + 1 txtNr.Text = intPositie ' De waarden uit de textboxes worden opgenomen in de record recArtikel.intNummer = Val(txtNr.Text) recArtikel.strNaam = txtArt.Text recArtikel.sngEenheidsprijs = Val(txtEenheidsprijs.Text) recArtikel.intAantal = Val(txtAantal.Text) recArtikel.sngSubtotaal = Val(txtSubtotaal.Text) ' De record wordt toegevoegd aan het bestand Put #1, intPositie, recArtikel ' Het formulier wordt klaargemaakt voor een volgende ingave txtNr.Text = Str(intPositie) txtArt.Text = "" txtEenheidsprijs.Text = "" txtAantal.Text = "" txtSubtotaal.Text = "" txtArt.SetFocus cmdToevoegen.Enabled = False End Sub

Put : het commando om een record toe te voegen aan een bestand. Het wordt gevolgd door dezelfde argumenten als bij het Get-commando. Wanneer het formulier wordt gesloten, dient het bestand te worden gesloten : Private Sub Command1_Click() 'Bestand sluiten en programma beindigen Close #1 End End Sub

Uiteraard kan je aan dit deeltje van het programma best nog de nodige code toevoegen om fouten op te vangen. Zo kan je het onmogelijk maken om in numerieke velden tekst in te geven, ervoor zorgen dat elk veld moet ingevuld zijn om een record te kunnen toevoegen, enz.

126

www.marcgoris.be

Programmeren in Visual Basic

Een overzicht op het scherm weergeven Ontwerp het afgebeelde formuliertje waarin we het overzicht van een factuurtje kunnen weergeven. Zorg ervoor dat dit formuliertje het opstartobject van het project wordt.

Wanneer de gebruiker op de knop Factuur openen klikt, moet er een bestand worden geopend, en dienen de gegevens uit dat bestand in de listboxes op het scherm worden getoond. Uiteraard is het interessant dat de gebruiker kan kiezen welk factuur hij opent (gesteld dat er meerdere werden bewaard). Visual Basic heeft de nodige gereedschappen aan boord om zelf een soort verkennervenster aan te maken, waarin de gebruiker een bestand kan selecteren en openen. We overlopen de aanmaak van zulk een venster stap voor stap : Maak een nieuw formulier aan. In de toolbox aan de linkerkant van het scherm vind je drie besturingselementen die we nodig hebben om een verkennerscherm te maken : een drivelistbox (1), een dirlistbox (2) en een filelistbox (3). Ontwerp nu een nieuw formulier dat eruit ziet zoals afgebeeld. Links boven komt de drivelistbox, eronder de dirlistbox en rechts de filelistbox. Daaronder twee knoppen : eentje om te annuleren en eentje om een gekozen bestand daadwerkelijk te openen. Bij het openen van het formulier, wordt standaard de actieve drive en de map getoond. Tijdens het ontwerpen van het Visual Basic-project is dit de programmamap van Visual Basic, zoals hierboven afgebeeld. Wil je dat een andere map standaard wordt getoond, dan kan je die bij het laden van het formulier meegeven : Private Sub Form_Load() ' Openen vanaf het diskettestation drvDrive.Drive = "a:\" dirMap.Path = drvDrive.Drive filBestand.Path = dirMap.Path End Sub

www.marcgoris.be

127

Programmeren in Visual Basic

Wanneer je een andere drive kiest, moet de mappenlijst in de dirlistbox automatisch worden aangepast : Private Sub drvDrive_Change() ' De mappen- en bestandslijst worden aangepast dirMap.Path = drvDrive.Drive filBestand.Path = dirMap.Path End Sub Wanneer je een bepaalde map selecteert, moet uiteraard ook de bestandslijst in de filelistbox worden aangepast : Private Sub dirMap_Change() ' De bestandslijst en het pad worden aangepast filBestand.Path = dirMap.Path strPad = filBestand.Path End Sub Wanneer je een bestand hebt geselecteerd, kan het volledige pad naar dat bestand worden samengesteld. In bovenstaande voorbeelden zag je al dat het pad als een string wordt opgebouwd. We vullen de string nog verder aan : Private Sub filBestand_Click() ' Het pad wordt in een string bewaard strPad = dirMap.Path + "\" + filBestand.FileName End Sub Wanneer de knop annuleren wordt aangeklikt, wordt de string voor het pad leeggemaakt en het formuliertje gesloten : Private Sub cmdAnnuleren_Click() ' De string wordt leeggemaakt en het formulier gesloten strPad = "" Unload frmOpenen End Sub Wanneer de knop openen wordt aangeklikt, wordt het bestand geopend dat geselecteerd werd, en worden de listboxes in het formulier frmFactuur gevuld : Private Sub cmdOpenen_Click() Dim Dim Dim Dim Dim Dim intNummer As Integer intNaam As String sngEenheidsprijs As Single intAantal As Integer sngSubtotaal As Single sngTotaal As Single

' Het bestand openen voor random toegang Open strPad For Random As #1

128

www.marcgoris.be

Programmeren in Visual Basic

' In een herhaalstructuur worden de listboxes gevuld Do While Not EOF(1) Get #1, , recArtikel intNummer = recArtikel.intNummer strNaam = recArtikel.strNaam sngEenheidsprijs = recArtikel.sngEenheidsprijs intAantal = recArtikel.intAantal sngSubtotaal = recArtikel.sngSubtotaal frmFactuur.lstNr.AddItem intNummer frmFactuur.lstArt.AddItem strNaam frmFactuur.lstEenheidsprijs.AddItem sngEenheidsprijs frmFactuur.lstAantal.AddItem intAantal frmFactuur.lstSubtotaal.AddItem sngSubtotaal sngTotaal = sngTotaal + sngSubtotaal Loop ' De textbox Totaal wordt ingevuld frmFactuur.txtTotaal.Text = Str(sngTotaal) ' Het formuliertje wordt gesloten Unload frmOpenen End Sub Uiteraard moet je nu ook voor dit formuliertje de nodige code toevoegen om fouten op te vangen.

Samenvatting : ontwerp van een verkennervenster Gebruik in het ontwerp van een verkennervenster de besturingselementen drivelistbox, dirlistbox en filelistbox, die zich in de toolbox bevinden. Speciale eigenschappen : - .Drive : de drive-aanduiding van een drivelistbox - .Path : het pad naar een map in een Het pad naar een bestand wordt weergegeven als een string.

Uiteindelijk zou je hiermee voldoende moeten kunnen om het hele project verder af te werken. Pas het formuliertje voor het toevoegen van een record aan, zodat het perfect met het formulier frmFactuur samenwerkt. Maak nog een formulier aan voor het aanmaken van een nieuw factuur (analoog aan het openen van een factuur), en formuliertjes voor het verwijderen van een record en voor het aanpassen van de gegevens van een record. Enkele tips : Voor het wijzigen van een record : zorg ervoor dat de gebruiker door gewoon het nummertje van de record in te geven, de gegevens van de juiste record te zien krijgt en kan aanpassen. Voor het verwijderen van een record werk je met een hulpbestand. Het principe is hetzelfde als het verwijderen van een element uit een lijst, maar de commandos bij het werken met bestanden zijn anders : - Open het originele bestand en maak een nieuw hulpbestand aan - De gebruiker kan ingeven welke record moet verwijderd worden

www.marcgoris.be

129

Programmeren in Visual Basic

Alle records worden uit het originele bestand ingelezen, en weggeschreven in het hulpbestand, behalve de record die verwijderd moet worden. Beide bestanden worden gesloten Het originele bestand wordt verwijderd met het commando Kill Het hulpbestand wordt met het commando Name hernoemd en krijgt de naam van het originele bestand ... Origineel = strPad Hulp = "c:\hulp.dat" ... Close #1, #2 Kill Origineel Name Hulp as Origineel ...

Zorg in elk formulier en bij elke handeling voor de gebruiker dat fouten zoveel mogelijk door het programma worden opgevangen. Bewaar het project met als naam Vb12.

Oefening Maak een programma om de volgende gegevens van de leerlingen van de klassen van onze school te bewaren : naam, e-mail, GSM-nummer en geboortedatum. Ontwerp daarvoor zelf alle formulieren, maar zorg er uiteraard voor dat ze gebruiksvriendelijk zijn. Houd rekening met de volgende vereisten : Voor elke klas wordt een nieuw bestand aangemaakt. Zorg ervoor dat de gegevens van een klas in een overzicht kunnen worden weergegeven. Er moet een mogelijkheid bestaan om zelf te kiezen waar bestanden worden geopend en opgeslagen door middel van een verkennervenster. Nieuwe leerlingen moeten makkelijk kunnen worden toegevoegd aan een klas. Leerlingen moeten makkelijk uit een klas kunnen worden verwijderd. De gegevens van een leerling moeten makkelijk kunnen worden aangepast. De leerlingen worden in elke klas bewaard in opklimmende volgorde volgens leeftijd. Gebruik voor de sortering de bubblesort-methode (zie : 9.4). Zorg ervoor dat fouten in het programma zelf worden opgevangen. Bewaar het project met als naam Oef20.

130

www.marcgoris.be

Programmeren in Visual Basic

11.3

Besturing van een Microsoft Access-database

Visual Basic maakt het mogelijk om databases te besturen die met een bestaand softwarepakket leesbaar zijn. Zo kan Visual Basic overweg met databases van Microsoft Access, Dbase, Foxpro en Paradox. Om hiermee vlot overweg te kunnen, is uiteraard wel een basiskennis vereist van het betreffende softwarepakket. Daarom beperken wij ons hier tot het besturen van een Microsoft Access database. 11.3.1 Het aanmaken van een nieuwe database We maken als voorbeeld een database aan met de gegevens van de leerlingen van je klas. De naam van de database is school.mdb, de naam van de tabel die we aanmaken in de database is tblKlas.  Om een nieuwe database aan te maken met Visual Basic, hebben we de Visual Data Manager nodig. Die kan je oproepen via het menu Add-Ins.

 We maken nu een nieuwe database aan voor Microsoft Access. Voor de Accessversies 97 en hoger kies je versie 7.0 MDB.

Bewaar de nieuwe database met als naam school in een nieuwe map vb13.

www.marcgoris.be

131

Programmeren in Visual Basic

 In het data manager scherm verschijnen twee vensters : het database window en het SQL window. Klik met de rechtermuisknop in het database window en kies New Table

 Geef de nieuwe tabel de naam tblKlas en klik op de knop Add Field om velden in de nieuwe tabel aan te maken.

 Maak nu de velden aan zoals in onderstaan voorbeeld. Kies voor elk veld een een correct veldtype.

132

www.marcgoris.be

Programmeren in Visual Basic

 Nu geven we aan welk veld we gaan gebruiken als primair sleutelveld. Klik in het table structure window op de knop Add Index. Het veld dat we als primaire sleutel zullen gebruiken, is het veld Nummer.  Tenslotte maken we de tabel daadwerkelijk aan, door te klikken op de knop Build the Table. In het database window van de Data Manager zie je nu de nieuwe tabel verschijnen.

Een bestaande Access-database gebruiken Uiteraard kan je ook gebruik maken van een al bestaande database in Access. Daarvoor kies je in het Data Manager venster via het menu File de optie Open Database. Je krijgt nu een verkennervenster te zien, waarin je de database waarmee je wil werken kan selecteren en openen. Je kan de structuur van een bestaande tabel altijd oproepen door in het Data Manager window met de rechtermuisknop te klikken op de tabel, en dan de optie Design te kiezen. Het Table Structure window verschijnt dan.

11.3.2 Gegevens invoeren via de Visual Data Manager Klik in het Visual Data Manager venster met de rechter-muisknop op de tabel, en kies Open. Om gegevens in te vullen klik je eerst op de knop Add. Telkens je een record hebt ingevuld, klik je op de knop Update.

Voer nu op deze manier de gegevens in van alle leerlingen van je klas. Maak nu op dezelfde wijze een nieuwe tabel met de naam tblPunten, waarin je het nummer van een leerling, en de punten voor alle vakken die je hebt, kan ingeven.

www.marcgoris.be

133

Programmeren in Visual Basic

11.3.3 Ontwerp van een speciaal formulier voor het bewerken van gegevens Uiteraard is het de bedoeling om zelf een formuliertje te ontwerpen, waarmee je de gegevens uit een database kan bewerken. Daarvoor moet er een verbinding tot stand worden gebracht tussen het formulier en de tabel. Daarnaast is er ook een verbinding nodig tussen de verschillende invoervakken van het formulier en de velden uit de tabel. In de toolbox vind je het besturingselement Datacontrol. Hiermee maak je de verbinding tussen het formulier en een tabel. Op het formulier verschijnt een datacontrol-balkje. In het properties window van de datacontrol kan je, in de eigenschap DatabaseName, het formulier verbinden met een bestaande database. Door op het knopje met de drie puntjes te klikken, verschijnt een verkennervenster waarin je de database kan opzoeken. Wanneer je het Visual Basic project echter in dezelfde map bewaart als de database, hoef je niet het hele pad in te geven, maar volstaat het om de naam van de database in te geven. Verder moet je in de eigenschappen aangeven met welke tabel je wil werken, in de eigenschap RecordSource. Ook moet je het recordset-type aangeven. Er bestaan 3 soorten recordset-types : Table Dynaset Snapshot Een verzameling records uit n tabel. Records kunnen bewerkt worden. Een verzameling records uit een tabel of query, die gebaseerd is op n of meer tabellen. Records kunnen bewerkt worden. Een verzameling records uit een tabel of query, die gebaseerd is op n of meer tabellen. Records kunnen enkel gelezen, niet bewerkt worden.

In de eigenschappen van de tekstvakken, kan je nu aangeven uit welk gegevensbestand en welk veld de gegevens moeten gelezen worden. Hiervoor maak je gebruik van de eigenschappen DataSource en DataField. Ontwerp nu dit formuliertje. Maak gebruik van de bijgevoegde objectentabel voor de eigenschappen van alle besturingselementen.

134

www.marcgoris.be

Programmeren in Visual Basic

Object

Type

Naam

Eigensch.

Waarde

formulier Datacontrol Leerling Label Naam Tekstvak Naam Label Voornaam Tekstvak Voornaam Label Straat Tekstvak Straat Label Huisnummer Tekstvak Huisnummer Label Postcode Tekstvak Postcode Label Gemeente Tekstvak Gemeente Label E-mail

Formulier Datacontrol Label Textbox Label Textbox Label Textbox Label Textbox Label Textbox Label Textbox Label

frmLeerling datLeerling lblNaam txtNaam lblVoornaam txtVoornaam lblStraat txtStraat lblHuisnummer txtHuisnummer lblPostcode txtPostcode lblGemeente txtGemeente LblEmail

Caption Caption DatabaseName RecordSource RecordsetType Caption Text Font DataSource DataField Caption Text Font DataSource DataField Caption Text Font DataSource DataField Caption Text Font DataSource DataField Caption Text Font DataSource DataField Caption Text Font DataSource DataField Caption

Leerlinggegevens Leerling School.mdb tblKlas Dynaset Naam (leeg) 12 pt, bold datLeerling Naam Voornaam (leeg) 12 pt, bold datLeerling Voornaam Straat (leeg) 12 pt datLeerling Straat Huisnummer (leeg) 12 pt datLeerling Huisnummer Postcode (leeg) 12 pt datLeerling Postcode Gemeente (leeg) 12 pt datLeerling Gemeente E-mail adres

www.marcgoris.be

135

Programmeren in Visual Basic

Object

Type

Naam

Eigensch.

Waarde

Tekstvak E-mail Label GSM Tekstvak GSM Label Geboortedatum

Textbox Label Textbox Label

txtEmail lblGSM txtGSM lblGeboortedatum txtGeboortedatum

Tekstvak Geboortedatum Textbox Knop Sluiten Tekstvak Nummer

Command button cmdSluiten Textbox txtNummer

Text Font DataSource DataField Caption Text Font DataSource DataField Caption Text Font DataSource DataField Caption Enabled Text Font DataField RecordsetType

(leeg) 12 pt datLeerling Email GSM (leeg) 12 pt datLeerling GSM Geboortedatum (leeg) 12 pt datLeerling Geboortedatum Sluiten False (leeg) 12 pt Nummer Dynaset

De knoppen met de pijltjes in de datacontrol hebben de volgende betekenis : MoveFirst MovePrevious MoveNext MoveLast

Er rest nu nog een probleem : je kan op deze manier geen nieuwe records toevoegen, enkel de bestaande records inlezen. Om hieraan te verhelpen, wijzig je de waarde van de eigenschap EOFAction van de datacontrol. Die heeft standaard de waarde MoveLast. Wijzig de waarde naar Add New. Wanneer je nu met het pijltje voor volgende record (MoveNext) voorbij de laatste record gaat, worden alle textboxes leeggemaakt, en kan een nieuwe record worden ingevuld. Het kan, maar het is weinig gebruiksvriendelijk. Daarom maken we onderaan op het formulier enkele knoppen aan : voor een nieuwe record, voor het wijzigen van een record, voor het bewaren van de wijzigingen en voor het verwijderen van een record.

136

www.marcgoris.be

Programmeren in Visual Basic

 Een nieuwe record invoegen. Automatisch moet er een nieuw recordnummer worden gegenereerd, en dit nummer verschijnt in de textbox txtNummer. Hiervoor worden het aantal records geteld met de methode <datacontrol>.Recordset.RecordCount en wordt er n waarde bijgeteld. Om een lege record in het formulier te krijgen, gebruiken we de methode <datacontrol>.Recordset.AddNew en zetten we de focus in de eerste textbox. Private Sub cmdNieuw_Click() Dim bytNummer As Byte bytNummer = datLeerling.Recordset.RecordCount + 1 datLeerling.Recordset.AddNew txtNummer = Str(bytNummer) txtNaam.SetFocus End Sub De nieuwe record wordt pas bewaard wanneer de methode <datacontrol>.Recordset.Update werd toegepast. Dat gebeurt met de knop Opslaan. Om te voorkomen dat fout ingevoerde records worden bewaard, wordt een messagebox getoond, waarin de gebruiker het opslaan moet bevestigen.
Private Sub cmdOpslaan_Click() Dim intAntw As Integer intAntw = MsgBox("Wilt u de wijzigingen opslaan?", vbYesNo, "Opslaan.") If intAntw = 6 Then datLeerling.Recordset.Update End Sub

 Een record wijzigen Om een record te wijzigen, moet de record eerst klaargemaakt worden om wijzigingen door te voeren. Dat gebeurt met de methode <datacontrol>.Recordset.Edit en is van toepassing op de actieve record. De gebruiker moet dus eerst met de datacontrol-balk de juiste record kiezen, en dan op de knop Wijzigen klikken. Private Sub cmdWijzigen_Click() datLeerling.Recordset.Edit txtNaam.SetFocus End Sub Om de wijzigingen effectief te bewaren, moet de methode <datacontrol>.Recordset.Update worden uitgevoerd. We gebruiken daarvoor gewoon dezelfde knop Opslaan.  Een record verwijderen Hiervoor gebruik je de methode <datacontrol>.Recordset.Delete. De actieve record wordt dan verwijderd, maar dat kan je pas zien als je naar een andere record gaat. Private Sub cmdVerwijderen_Click() datLeerling.Recordset.Delete datLeerling.Recordset.MoveNext End Sub

www.marcgoris.be

137

Programmeren in Visual Basic

Andere besturingselementen voor het werken met databases  Databound Listbox en Combobox Dit is een combobox die gekoppeld kan worden aan een tabel uit een database. Standaard zit dit besturingselement niet in de toolbox. Om ze aan de toolbox toe te voegen, ga je als volgt te werk : Kies in het menu Project de optie Components. Selecteer in het tabblad Controls de optie Microsoft Data Bound List Controls. Je ziet nu twee nieuwe besturingselementen verschijnen in de toolbox : een listbox en een combobox die je kan verbinden met een database.  Databound Grid Ook dit besturingselement zit niet standaard in de toolbox, maar vind je in de control-lijst net boven de Databound List Controls. Het laat je toe om gegevens uit de tabel in tabelvorm in een formulier te zetten.

Maak nu nog twee formulieren aan : eentje voor het ingeven van de punten, en eentje dat dienst doet als startscherm voor het project, met erop twee knoppen : eentje om het formulier voor de leerlingengegevens te openen, en eentje om het formulier voor de punten te openen. Zorg ervoor dat dit formulier als startscherm wordt geopend bij het starten van het programma. Zorg voor een degelijke foutafhandeling in het ganse project. Bewaar het project met als naam vb13. 11.3.4 Oefening Maak een programma om de gegevens van een bibliotheek bij te houden. Maak daarvoor een database aan met als naam bib.mdb, waarin zich twee tabellen bevinden : tblKlanten waarin de gegevens van de ontleners worden bewaard, en tblBoeken waarin de gegevens van de boeken worden bewaard. Zorg dat elke tabel uit minstens 5 velden bestaat. Ontwerp voor het project een startscherm, waarin twee formulieren kunnen worden geopend : eentje voor het bewerken van de klantgegevens, en eentje voor het bewerken van de gegevens van de boeken. Zorg er wel voor dat de datacontrol in geen van beide formulieren zichtbaar is. Het navigeren doorheen de records zal dus moeten gebeuren met zelfgemaakte command buttons. Zorg voor een correcte foutafhandeling. Bewaar het project met als naam oef21.

138

www.marcgoris.be

Programmeren in Visual Basic

12. Toepassingen verdeelklaar maken


12.1 Helpschermen ontwikkelen

Wanneer programmeurs een programma willen verspreiden, zullen zij er proberen voor te zorgen dat bij zoveel mogelijk functies en mogelijkheden van het programma hulp wordt geleverd. Die hulp wordt dan geleverd in de vorm van helpschermen, die worden geopend wanneer de gebruiker daarom vraagt. Meestal voorziet de programmeur :     Een help-menu die de gebruiker toegang geeft tot de helpschermen ; Een inhoudstafel van die helpschermen ; Een lijst met kernwoorden waarop de gebruiker kan zoeken ; Een verklaring bij de gebruikte technische termen in de helpschermen.

Een goed idee van wat hier bedoeld wordt, krijg je wanneer je de helpfunctie van eender welk Microsoft programma opent. Bij wijze van voorbeeld maken we eerst een zeer eenvoudig programma aan om twee getallen op te tellen of te vermenigvuldigen. Het formuliertje voor dit programma is hier afgebeeld, en hieronder vind je de objectentabel en de programmacode. Maak dit eenvoudige programma aan, en bewaar het met als naam vb14.

Object

Type

Naam

Eigensch.

Waarde

Formulier Menu Bestand - Menu Leegmaken - Menu Afsluiten Menu Uitvoeren - Menu Optellen - Menu Vermenigv. Menu Help - Menu Helponderw. - Menu Helpstreepje - Menu Info Label Getal 1 Label Getal 2 Tekstvak Getal 1 Tekstvak Getal 2 Label Bewerking Optie Optellen Optie Vermenigvuldigen

Form Menu Menu Menu Menu Menu Menu Menu Menu Menu Menu Label Label Textbox Textbox Label Option button Option button

frmRekenen mnuBestand mnuBestandLeegmaken mnuBestandAfsluiten mnuUitvoeren mnuUitvoerenOptellen mnuUitvoerenVermenigv. mnuHelp mnuHelpOnderwerpen mnuHelpStreepje mnuHelpInfo lblGetal1 lblGetal2 TxtGetal1 TxtGetal2 lblBewerking optPlus optMaal
www.marcgoris.be

Caption Caption Caption Caption Caption Caption Caption Caption Caption Shortcut Caption Caption Caption Caption Text Text Caption Caption Caption

Rekenen &Bestand &Leegmaken &Afsluiten &Uitvoeren &Optellen &Vermenigvuldigen &Help Helponderwerpen F1 - &Info Het eerste getal: Het tweede getal: (leeg) (leeg) Bewerking: Optellen Vermenigvuldigen
139

Programmeren in Visual Basic

Object

Type

Naam

Eigensch.

Waarde

Knop Uitvoeren Tekstvak Resultaat Knop Afsluiten Knop Leegmaken


Option Explicit

Command button cmdUitvoeren Textbox txtResultaat

Command button cmdAfsluiten Command button cmdLeegmaken

Caption Text Locked Font Caption Caption

Uitvoeren (leeg) True 24 pt, bold &Afsluiten &Leegmaken

Private Sub cmdAfsluiten_Click() 'Het programma afsluiten End End Sub Private Sub mnuBestandAfsluiten_Click() 'Het programma afsluiten End End Sub Private Sub cmdLeegmaken_Click() 'Het formulier weer leegmaken txtGetal1 = "" txtGetal2 = "" txtResultaat = "" optPlus.Value = False optMaal.Value = False txtGetal1.SetFocus End Sub Private Sub mnuBestandLeegmaken_Click() 'Het formulier weer leegmaken txtGetal1 = "" txtGetal2 = "" txtResultaat = "" optPlus.Value = False optMaal.Value = False txtGetal1.SetFocus End Sub Private Sub cmdUitvoeren_Click() Dim intFout As Integer Dim sngResultaat As Single Select Case True 'Foutmelding als het eerste getal niet ingevuld is Case txtGetal1 = "" intFout = MsgBox("U moet het eerste getal invullen!", vbExclamation, "Invoerfout") txtGetal1.SetFocus 'Foutmelding als het eerste getal geen numerieke waarde heeft Case Not (IsNumeric(txtGetal1)) intFout = MsgBox("Uw eerste invoer is geen getal!", vbExclamation, "Invoerfout") txtGetal1 = "" txtGetal1.SetFocus 'Foutmelding als het tweede getal niet ingevuld is Case txtGetal2 = "" intFout = MsgBox("U moet het tweede getal invullen!", vbExclamation, "Invoerfout") txtGetal2.SetFocus

140

www.marcgoris.be

Programmeren in Visual Basic

'Foutmelding als het tweede getal geen numerieke waarde heeft Case Not (IsNumeric(txtGetal2)) intFout = MsgBox("Uw tweede invoer is geen getal!", vbExclamation, "Invoerfout") txtGetal2 = "" txtGetal2.SetFocus 'Foutmelding als er geen bewerking is gekozen Case (optPlus = False And optMaal = False) intFout = MsgBox("Uw moet een bewerking kiezen!", vbExclamation, "Invoerfout") 'Optelling maken Case optPlus sngResultaat = Val(txtGetal1) + Val(txtGetal2) txtResultaat = Str(sngResultaat) 'Vermenigvuldiging maken Case optMaal sngResultaat = Val(txtGetal1) * Val(txtGetal2) txtResultaat = Str(sngResultaat) 'Onbekende fout Case Else intFout = MsgBox("Onbekende invoerfout! Het programma wordt afgesloten", vbExclamation, "Invoerfout") End End Select End Sub Private Sub mnuUitvoerenOptellen_Click() Dim intFout As Integer Dim sngResultaat As Single Select Case True 'Foutmelding als het eerste getal niet ingevuld is Case txtGetal1 = "" intFout = MsgBox("U moet het eerste getal invullen!", vbExclamation, "Invoerfout") txtGetal1.SetFocus 'Foutmelding als het eerste getal geen numerieke waarde heeft Case Not (IsNumeric(txtGetal1)) intFout = MsgBox("Uw eerste invoer is geen getal!", vbExclamation, "Invoerfout") txtGetal1 = "" txtGetal1.SetFocus 'Foutmelding als het tweede getal niet ingevuld is Case txtGetal2 = "" intFout = MsgBox("U moet het tweede getal invullen!", vbExclamation, "Invoerfout") txtGetal2.SetFocus 'Foutmelding als het tweede getal geen numerieke waarde heeft Case Not (IsNumeric(txtGetal2)) intFout = MsgBox("Uw tweede invoer is geen getal!", vbExclamation, "Invoerfout") txtGetal2 = "" txtGetal2.SetFocus 'Optelling maken Case Else sngResultaat = Val(txtGetal1) + Val(txtGetal2) txtResultaat = Str(sngResultaat) End Select End Sub Private Sub mnuUitvoerenVermenigvuldigen_Click() Dim intFout As Integer Dim sngResultaat As Single Select Case True 'Foutmelding als het eerste getal niet ingevuld is Case txtGetal1 = ""

www.marcgoris.be

141

Programmeren in Visual Basic

intFout = MsgBox("U moet het eerste getal invullen!", vbExclamation, "Invoerfout") txtGetal1.SetFocus 'Foutmelding als het eerste getal geen numerieke waarde heeft Case Not (IsNumeric(txtGetal1)) intFout = MsgBox("Uw eerste invoer is geen getal!", vbExclamation, "Invoerfout") txtGetal1 = "" txtGetal1.SetFocus 'Foutmelding als het tweede getal niet ingevuld is Case txtGetal2 = "" intFout = MsgBox("U moet het tweede getal invullen!", vbExclamation, "Invoerfout") txtGetal2.SetFocus 'Foutmelding als het tweede getal geen numerieke waarde heeft Case Not (IsNumeric(txtGetal2)) intFout = MsgBox("Uw tweede invoer is geen getal!", vbExclamation, "Invoerfout") txtGetal2 = "" txtGetal2.SetFocus 'Vermenigvuldiging maken Case Else sngResultaat = Val(txtGetal1) * Val(txtGetal2) txtResultaat = Str(sngResultaat) End Select End Sub Private Sub mnuHelpInfo_Click() Dim intInfo As Integer intInfo = MsgBox("Made by Marc Goris, KA Malle", vbInformation, "Copyright") End Sub

12.1.1 De teksten voor de helpschermen maken De tekst van de helpschermen zelf moet je vooraf ingeven in een RTF-bestand (Rich Text Format). De meeste tekstverwerkingspakketten kunnen dit. Let erop dat elk nieuw helpscherm op een nieuwe pagina begint. Bewaar de tekst met als naam Help.rtf. Let er wel op dat je de tekst zeker in RTF-opmaak bewaart, anders zal het niet werken.

Inhoudstafel
Optellen Vermenigvuldigen Het scherm leegmaken Het programma afsluiten Copyright

142

www.marcgoris.be

Programmeren in Visual Basic

Optellen
Om twee getallen met elkaar op te tellen, moet u natuurlijk beide getallen eerst invullen. Het programma zal enkel getallen kunnen optellen, als u ook echt getallen heeft ingegeven. Nadat u beide getallen heeft ingegeven, kan u op drie manieren deze getallen optellen : 1. Klik in het menu Uitvoeren op de optie Optellen. 2. Gebruik de toetsencombinatie ALT+U en daarna ALT+O. 3. Klik het keuzerondje Optellen op het scherm aan, en klik dan op de knop Uitvoeren. Het resultaat verschijnt in het vak onder de knop Uitvoeren.

Vermenigvuldigen
Om twee getallen met elkaar te vermenigvuldigen, moet u natuurlijk beide getallen eerst invullen. Het programma zal enkel getallen kunnen vermenigvuldigen, als u ook echt getallen heeft ingegeven. Nadat u beide getallen heeft ingegeven, kan u op drie manieren deze getallen vermenigvuldigen : 1. Klik in het menu Uitvoeren op de optie Vermenigvuldigen. 2. Gebruik de toetsencombinatie ALT+U en daarna ALT+V. 3. Klik het keuzerondje Vermenigvuldigen op het scherm aan, en klik dan op de knop Uitvoeren. Het resultaat verschijnt in het vak onder de knop Uitvoeren.

Het scherm leegmaken


Als je een nieuwe bewerking wil maken, kan je het scherm op een van de volgende vier manieren leegmaken : 1. Klik op de knop Leegmaken onderaan op het scherm. 2. Gebruik de toetsencombinatie ALT+L. 3. Klik in het menu Bestand op de optie Leegmaken. 4. Gebruik de toetsencombinatie ALT+B en daarna ALT+L. Je kan onmiddellijk nieuwe getallen beginnen ingeven.

Het programma afsluiten


Wanneer je klaar bent, kan je het programma op vijf verschillende manieren afsluiten : 1. Klik op het knopje met het kruisje in de rechterbovenhoek van het scherm. 2. Klik op de knop Afsluiten onderaan op het scherm. 3. Gebruik de toetsencombinatie ALT+A. 4. Klik in het menu Bestand op de optie Afsluiten. 5. Gebruik de toetsencombinatie ALT+B en daarna ALT+A.

www.marcgoris.be

143

Programmeren in Visual Basic

Copyright
Rekenen v. 1.0.0 Copyright : Marc Goris, KA Malle E-mail : mgoris@gomalle.be Website : www.marcgoris.be

In deze tekst gaan we nu een aantal elementen vastleggen, die we later in de definitieve helpschermen nodig hebben :  Context strings Dit zijn de namen van het onderwerp dat je aan elk helpscherm geeft. Context strings moeten uniek zijn, wat wil zeggen dat er geen twee helpschermen dezelfde naam kunnen krijgen. In ons voorbeeld hebben we zes hulpschermen, wat betekent dat we zes keer een context string moeten aanmaken. Dat doe je als volgt : Zet de cursor in de tekst net voor het woord Inhoudstafel in de eerste pagina. Kies uit het menu Invoegen de optie Voetnoot Selecteer de optie Voetnoot en de optie Aangepaste markering. Als aangepaste markering geef je het teken # in. Daarna klik je op OK. Typ nu als voetnoot het woord Inhoudstafel. Maak op precies dezelfde manier context strings aan voor de vijf andere hulpschermen. Denk erom dat een context string steeds aan elkaar moet geschreven worden. Voor het hulpscherm Het scherm leegmaken kies je als context string gewoon Leegmaken, en voor Het programma afsluiten kies je als context string Afsluiten.  Links De onderwerpen in de inhoudstafel moeten uiteraard verwijzen naar het juiste helpscherm. Zo voeg je verwijzingen naar een context string in : Zet een dubbele onderstreping onder het woord Optelling in de inhoudstafel, door middel van het dialoogvenster Lettertype (in het menu Opmaak). Typ nu vlak achter dit woord de context string voor dit helpscherm in :

Inhoudstafel
OptellingOptelling

144

www.marcgoris.be

Programmeren in Visual Basic

Selecteer nu de context string, en vink daarna het vakje Verborgen tekst in het dialoogvenster Lettertype aan. Maak op dezelfde manier links aan naar de andere helpschermen.

 Helpschermen een titel geven


De helpschermen hebben al wel een naam, maar nog geen titel. Dat is handig wanneer de gebruiker later een lijst wil zien van eerder geraadpleegde onderwerpen. Je maakt een titel van een hulpscherm op de volgende manier :

Zet de cursor net voor het woord Inhoudstafel op de eerste pagina. Voeg een nieuwe voetnoot in, net als voor een context string, maar gebruik nu als markering het dollarteken : $ Als voetnoot typ je de titel van het helpscherm in. In tegenstelling tot een context string moet die niet noodzakeling aan elkaar geschreven worden. Maak op dezelfde manier titels aan voor de andere hulpschermen.

 Keywords invoegen In helpschermen kan je uiteraard ook zoeken op zoekwoorden, ook keywords of indexes genoemd. Dat kunnen eender welke woorden zijn die ergens in een helpscherm voorkomen. Keywords markeer je als volgt : Plaats de cursor voor de titel Inhoudstafel. Voeg een voetnoot in, met als aangepaste markering de letter K. Je kan nu verschillende keywords ingeven, van elkaar gescheiden met een puntkomma. Typ als voetnoot in : Inhoudstafel;Index;Inhoudsopgave Maak op dezelfde manier zinvolle keywords aan voor de andere helpschermen.

 Verklarende Pop-ups Vaak worden in helpschermen technische termen gebruikt, die aan de gebruiker dienen te worden verklaard. Dergelijke woorden worden dan in het groen en met een stippellijn onderstreept weergegeven. Als je erop klikt, verschijnt een pop-up met de verklaring. Deze pop-ups maak je op de volgende manier :

www.marcgoris.be

145

Programmeren in Visual Basic

Onderstreep het woordje Invullen in de pagina Optellen. Voor een popup volstaat een enkele onderstreping. Typ tegen het woordje Invullen aan, opnieuw het woordje Invullen : te tellen, moet u natuurlijk beide getallen eerst invullenInvullen. Het programma

Verberg het tweede woordje invullen. Maak nu na de laatste pagina een nieuwe pagina aan, die je de context string Invullen geeft. Geef de volgende tekst in :

Invullen
Het is de bedoeling dat je eerst twee getalletjes intypt in de vakjes bovenaan op het scherm. Zorg ervoor dat overal in de helpteksten, waar het woordje Invullen voorkomt, dit woord verklaard wordt. Zorg eveneens voor een popup bij het woord toetsencombinatie. De tekst die moet verschijnen in de popup is :

Toetsencombinatie
Een toetsencombinatie wil zeggen dat je twee toetsen tegelijk indrukt. De ALTtoets bevindt zich onmiddellijk links naast de spatiebalk. Bewaar de tekst opnieuw, met als naam Help.rtf.

12.1.2

Werken met de Microsoft Help Workshop

146

www.marcgoris.be

Programmeren in Visual Basic

Kies in het menu File de optie New. Kies Help Project en klik op de knop OK. Selecteer de juiste map, en geef als bestandsnaam Help. Klik dan op Opslaan.

Klik op de knop Options om de volgende opties in te geven : In het veld Default Topic vul je de

naam van het hulpscherm in, dat standaard moet getoond worden. In het veld Help Title geef je de tekst in die in de titelbalk van het help-venster moet verschijnen. Sluit het venster door op OK te klikken.

Klik op de knop Files om de tekst uit het RTF-bestand te importeren. Klik op de knop Add en open via het verkennervenster naar het RFTbestand help.rtf. Klik op de knop OK om het bestand definitief te importeren.

www.marcgoris.be

147

Programmeren in Visual Basic

Nu gaan we de verschillende helpschermen invoegen, en er een index aan toekennen. Klik in het hoofdscherm van de Microsoft Help Workshop op de knop Maps. Klik op de knop Add om de helpschermen toe te voegen :

Je geeft telkens de naam in van een helpscherm, en een uniek nummer. Klik op OK om het scherm toe te voegen. Herhaal deze werkwijze tot je de zes helpschermen allemaal hebt ingevoegd. Je merkt dat de helpschermen niet op de index, maar wel alfabetisch worden gesorteerd. Wanneer alle helpschermen werden ingevoegd, klik je op de knop OK.

Uiteindelijk zijn we klaar om het project te compileren. Tijdens die procedure wordt de helpfunctie van het project definitief samengesteld.

Klik op de knop Save and Compile. Even later verschijnt er een rapport van het compileerproces.

148

www.marcgoris.be

Programmeren in Visual Basic

Zoek via de verkenner in de map waarin je het project hebt bewaard, en dubbelklik op het bestand Help.hlp. De helpschermen worden geopend, en je kan de links en de indexen uittesten. Wanneer je fouten ontdekt, zal je die eventueel in het RTF-bestand of in de Microsoft Help Workshop moeten verbeteren. De wijzigingen worden pas van kracht nadat je eerst opnieuw hebt gecompileerd.

12.1.3

De help-functie verbinden met het formulier

Uiteraard moet er nu nog een verbinding tot stand worden gebracht tussen het formulier in het project, en de help-functie die we net hebben gemaakt. Dat doe je met de volgende programmacode in het menu mnuHelpOnderwerpen :
Private Sub mnuHelpOnderwerpen_Click() Dim varHelp As Variant varHelp = Shell("winhelp C:\Mijn documenten\Visual Basic\Vb14\help.hlp", 1) End Sub

De functie Shell stelt je in staat om vanuit Visual Basic een andere toepassing te starten in dit geval de Help-functie. In de functie geef je het volledige pad naar het helpbestand in. Het tweede argument geeft aan hoe de toepassing moet worden geopend : Nr 0 1 2 3 4 6 VB-constante vbHide vbNormalFocus vbMinimizedFocus vbMaximizedFocus vbNormalNoFocus vbMinimizedNoFocus Betekenis De toepassing wordt geopend, maar de interface wordt niet op het scherm weergegeven. De toepassing wordt geopend in een venster van een normale grootte, en krijgt de focus. De toepassing wordt geopend, maar slechts getoond als een icoon in de Windows taakbalk. Ze krijgt wel de focus. De toepassing wordt zo geopend dat de interface het ganse scherm vult, en krijgt de focus. De toepassing wordt geopend in een venster van een normale grootte, maar krijgt niet de focus. De toepassing wordt geopend, maar slechts getoond als een icoon in de Windows taakbalk. Ze krijgt nietl de focus.

12.1.4

Oefening

Voeg in de oefening Oef10 (berekenen van het zakgeld) een helpmenu toe, en programmeer een zinvolle, volledige en gebruiksvriendelijke helpfunctie voor het project. Bewaar de nieuwe oefening met als naam Oef22.

www.marcgoris.be

149

Programmeren in Visual Basic

12.2

Een installatiewizard maken

Wanneer je een programma verdeelt, is het de bedoeling dat de gebruiker het programma door middel van een eenvoudige installatiewizard kan installeren. Tijdens het installeren moet immers een verbinding worden gelegd tussen het programma en het besturingssysteem. Dat heeft een aantal voordelen :

     

De nodige instellingen voor het programma worden opgenomen in het Windows register ; De nodige systeembestanden worden gekopieerd ; Er wordt desgevallend automatisch een nieuwe programmagroep aangemaakt in het Start-menu ; Er worden desgevallend snelkoppelingen aangebracht ; De mogelijkheid bestaat om het programma makkelijk te verwijderen via het icoon Software in het configuratiescherm ; Het installeren gebeurt automatisch en gebruiksvriendelijk, waardoor geen gespecialiseerde kennis van de gebruiker vereist is.

In Visual Studio wordt een handig hulpprogramma meegeleverd dat het mogelijk maakt om installatiewizards te maken. Dat gebeurt door middel van een eenvoudige wizard, waarin je stap voor stap je installatiewizard samenstelt. Een nadeel is wel dat de installatie later in het Engels zal gebeuren ; ondersteuning van het Nederlands is niet voorzien. Start de Package & Deployment Wizard, die je vindt in de Microsoft Visual Studio 6.0 Tools van Microsoft Visual Studio.

150

www.marcgoris.be

Programmeren in Visual Basic

In het startscherm kies je eerst het project waarvan je een installatiebestand wil maken. Om dit bestand te zoeken, klik je op de knop Browse. Klik op de knop Package om het samenstellen van de installatiewizard te starten. Het is best mogelijk dat je van je project nog geen uitvoerbaar bestand had gemaakt. Dat kon je doen via de optie Make Project.exe in het menu File van Visual Basic. Heb je dit nog niet gedaan, dan krijg je eerst de kans dat vooralsnog te doen, door op de knop Compile te klikken.

Volg nu de stappen in de wizard die je doorheen het hele proces zal leiden.

Klik op de kop Next.

We maken een standaard installatiewizard. Klik op de knop Next.

www.marcgoris.be

151

Programmeren in Visual Basic

Selecteer de map waarin de bestanden van de installatiewizard zullen worden bewaard. Indien die map nog niet bestaat, kan die eerst worden aangemaakt.

Klik op de knop Ja.

Selecteer de bestanden die je wil opnemen in het installatiepakket. Standaard worden alle bestanden geselecteerd. Je verandert daar best niets aan, en klikt op de knop Next.

Wanneer je je programma op diskettes wil verspreiden, kies je best voor de optie Multiple cabs. In dat geval behoud je de voorgestelde Cab size. In alle andere gevallen kies je voor de mogelijkheid Single Cab. Klik op de knop Next.

152

www.marcgoris.be

Programmeren in Visual Basic

Geef een zinvolle naam aan je installatiebestand. Je gebruikt hiervoor best de naam van het programma ; deze naam zal later in de installatiewizard gebruikt worden om het programma te benoemen.

Kies de map in het Start menu waarin je het programma standaard wil laten installeren. De gebruiker kan tijdens de installatieprocedure nog zelf een andere map kiezen. Indien de map nog niet zou bestaan op de computer van de gebruiker, wordt ze automatisch aangemaakt.

Je kan de doelmap van de voornaamste bestanden nog wijzigen, maar dat heeft zelden zin. Klik gewoon op de knop Next.

www.marcgoris.be

153

Programmeren in Visual Basic

Je kan ervoor kiezen om bepaalde bestanden te markeren als gedeelde bestanden, zodat ook andere programmas van deze bestanden gebruik kunnen maken. Tenzij dit uitdrukkelijk de bedoeling is, kan je dat best niet doen. Klik op de knop Next.

Aan het einde van de wizard klik je gewoon op de knop Finish. Je zal enkele ogenblikken lang een venstertje zien verschijnen waarin de wizard wordt opgebouwd. Wanneer dit gebeurd is, verschijnt in een laatste venstertje een rapport, waarin je kan lezen of het maken van de installatiewizard inderdaad geslaagd is of niet.

In de map waarin de bestanden voor de installatiewizard werden bewaard, vind je drie bestanden :

 Project1.cab  Setup.exe  Setup.lst


Wanneer je je programma wil verdelen, dien je alle drie de bestanden te kopiren op een CD-ROM of een diskette. Wil je je programma verdelen via het internet, dan is het een beter idee om de drie bestanden eerst in een ZIP-bestand samen te pakken. Op die manier bekom je immers n bestand, dat bovendien aanzienlijk minder ruimte in beslag neemt, en dus sneller kan verstuurd worden.

154

www.marcgoris.be

Programmeren in Visual Basic

Index
Abs functie Access database Activate form AddItem Alignment property Append Array Ascii-code Autosize property BackColor property BackStyle property BASIC Begrensde herhaling Besturingselementen Bewaren van een project Booleaanse operatoren Boolean type BorderColor property BorderStyle property BorderWidth Breakpoint Bubblesort methode ByRef parameter Byte type ByVal parameter Cancel property Caption property Case statement Case select statement Change event Check box Checked property Clear Click event Close Columns property Combobox Command buttons Command buttons met icoontjes Const statement Constanten Context string ControlBox property Control array Controls Check box ComboBox Command button Databound Combobox Databound Grid Databound Listbox Datacontrol DirListBox DriveListBox FileListBox Image Labels Lijnen Listbox Option buttons Picture Box Schuifbalken Scrollbars Shape Textbox Vormen Currency type Database DatabaseName Databound Combobox 29 131 82 53, 117 8, 33 122 99 27 8 8, 51 8, 51 3 45 zie : Controls 19 25, 41 22 50 8, 14, 32, 50 50 108 104 96 22 96 13 9, 67 39 39 26 34 68 116 26 121 52 53 12 44 24 24 144 14 103 6 34 53 12 138 138 138 134 127 127 127 32 7 50 52 33 32 54 54 51 10 51 22 131 134 138 Databound Grid Databound Listbox Datacontrol Date functie DateAdd functie DateDiff functie DatePart functie Date/Time type Day functie DblClick event Decimal type DEF declaraties Default property Dim statement DirListBox Do statement Dockable windows Double type DrawMode property DriveListBox Dynamische array DynaSet (Recordset) Eendimensionele array Eigenschappen Else statement Enabled property Enkelvoudige selectie EOF EOFAction Err.Description Err.Number Event handler Event procedure Events Expliciete declaraties FileListBox FillStyle property Fix functie Font property For statement ForeColor property Form layout window Format functie Formulieren Foutafhandeling Frame Functieprocedure Functies Abs Date DateAdd DateDiff DatePart Day Format Fix Hour InStr Int IsArray IsDate IsMissing IsNumeric Lcase Left Len Ltrim Mid Minute Month Now 138 138 134 30 30 30 30 30 30 26 22 23 13 17, 23 127 47 5 22 50 127 102 134 99 Zie : Properties 36 68 35 121 134 111 111 25 93 25 23 127 51 29 9 45 9 4 92 76 107 33 94 28 29 30 30 30 30 30 92 29 30 29 29 111 111 111 29,111 29 29 29 29 29 30 30 30

www.marcgoris.be

155

Programmeren in Visual Basic

Randomize Right Rtrim Seek Shell Time Trim Val Second Sgn Sqr Str String Trim TypeName Ucase Year Gebeurtenissen Gegevenstypes General procedure Geneste selecties Get Getalwaarden in een textbox Globale variabelen Gotfocus event Height property Helpschermen Hide (formulier) Hour functie Icon property If statement Image Impliciete declaraties Index Input InputBox Installatiewizard InStr functie Int functie Integer type IntegralHeight property Invulvakken IsArray functie IsDate functie IsMissing functie IsNumeric functie ItemData property Iteraties KeyAscii Keypress event Keywords (Helpscherm) Labels LargeChange property Lcase functie Left functie Left property Len functie Lijnen Links (Helpscherm) Listbox Load event Load form Locals window Lock controls Logische fouten Logische operatoren Long type Loop statement Lostfocus event Ltrim functie Max property

72 29 29 125 149 30 29 17 30 29 29 17 29 29 28 29 30 25 22 93 39 125 17 90 26 9 139 82 30 14 35 32 23 99 121 55 150 29 29 22 52 10 111 111 111 29, 111 52 43 26 26 144 7 54 29 29 9 29 50 144 52, 116 26 82 110 12 107 25, 41 22 47 26 29 54

MaxButton property MDI-form MDIChild Meerdimensionele arrays Meervoudige selectie Menu Editor Menus MessageBox Methoden Microsoft Access Microsoft Help Workshop Mid functie Min property Minute functie Module Month functie Movable property Move (methods) MouseMove event MousePointer property MsgBox Multiline property Multiple Document Interface MultiSelect property Naamgeving van besturingselementen : systeem van Leszynski en Reddick Next statement Now functie Object browsers Object type On Error Opdrachtknoppen Open Operatoren Option buttons Optionele parameter Output Package & Deployment Wizard Path ParamArray Parameter PasswordChar Picturebox Picture property Popups (Helpscherm) Prefix Print Print method Private Procedure Project explorer window Properties Alignment Autosize BackColor BackStyle BorderColor BorderStyle BorderWidth Cancel Caption Checked Columns ControlBox DatabaseName Default DrawMode Enabled FillColor FillStyle Font ForeColor Height

14 88 88 101 39 67, 105 66 62 28 131 146 29 54 30 86 30 14 134 26 9 62 11 88 52 8, 67 46 30 24 22 111 12 120 24 33 96 120 150 128 97 96 11 32 13, 32 145 8 120 28 95 93 4 8, 33 8 8, 51 50, 51 8, 14, 32, 50 50 8 13 9 68 52 14 134 13 50 68 51 51 9 9 9

156

www.marcgoris.be

Programmeren in Visual Basic

Icon IntegralHeight ItemData LargeChange Left List ListCount ListIndex Max Maxbutton Min MousePointer Movable Multiline MultiSelect PasswordChar Path Picture RecordSource ScaleWidth ScaleHeight Scrollbars Shape ShownInTaskbar SmallChange Sorted StartUpPosition Stretch Style TabIndex TabStop Text ToolTipText Top Value Visible Width WindowState X1, X2, Y1, Y2 Properties window Property procedure Public Put Quick watch Random bestanden Randomize functie Record Recordcount Recordset RecordSource Regeleinde Rekenkundige operatoren Relationele operatoren RemoveItem Require Variable Declaration Resume next Rich Text Format Right functie Rnd statement RTF Rtrim functie Runtime error ScaleHeight property ScaleWidth property Schuifbalken Scrollbars property SDI-form Second functie Seek functie Sequentile bestanden

14 52 52 54 9 52, 118 120 118 54 14 54 9 14 11 52 11 129 13, 32 134 14 14 11 51 14 54 52 14 32 13, 34, 52, 53 11 11 11, 53 9 9 33, 34 9, 68 9 14 50 4 93 95 126 109 123 72 123 136 134 134 38 24 25 118 22 111 142 29 72 142 29 107 14 14 54 11 88 30 125 114

Setfocus method Sgn functie Shape Shape property Shell functie Shortcut Show (formulier) ShowInTaskbar property Single Document Interface Single type SmallChange property Snapshot (Recordset) Sorted property Splash-screen Sqr functie StartUpPosition property Static Step into Step over Step statement Str functie Stretch property String functie String type Style property Subprocedure Suffix Syntax Error TabIndex property Table (Recordset) TabStop property TextBox Text property Time functie Timer Toetsenbordgestuurde command buttons Toolbox Tools ToolTipText property Top property Trappable errors Trim Twips TypeName functie Ucase functie Uitvoerbaar bestand maken Unload form Val functie Value property Variabelen Variant type Vb-constanten vbCrLf Vergrendelen controls op een formulier Verkennervenster Verplicht declareren van gegevens Visible property Visual Basic-constanten Visual Data Manager Voorwaardelijke herhaling Vormen Watches Width property WindowState property X1, X2 properties Y1, Y2 properties Year functie

28 29 51 51 149 67 82 14 88 22 54 134 52 85 29 14 95 108 108 46 17 32 29 22 13, 34, 52, 53 93 23 107 11 134 11 10, 17 11, 53 30 87 13 4, 6 zie : controls 9 9 111 29 9 28 29 18 82 17 33, 34 22 22 24, 149 38 12 127 22 9, 68 24, 149 131 47 50 109 9 14 50 50 30

www.marcgoris.be

157

Programmeren in Visual Basic

Bibliografie

 FRANKE, Matthias, Software Training Visual Basic 4, Easy Computing, Nijmegen, 1996  FRANS, Roger, Visual Basic 5.0 beginners, Campina Media vzw, Geel,1997  FRANS, Roger, Visual Basic 5.0 gevorderden, Campina Media vzw, Geel, 1997  MEEUSSEN, Jos, Visual Basic beginners, CBL, Antwerpen, 2001  MEEUSSEN, Jos, Visual Basic gevorderden, CBL, Antwerpen, 2001

 MSDN Devellopers Library, http://msdn.microsoft.com/library  Learning Lynx website, http://www.learninglynx.com/home.asp  VB by JC website, http://www.vbbyjc.com

158

www.marcgoris.be

Programmeren in Visual Basic

Praktische wenken bij de cursus


1. Doel van de cursus en doelpubliek
de

De cursus werd geschreven voor leerlingen van de 3 graad TSO Informaticabeheer. De inhoud werd gebaseerd op het gedeelte Programmeren in Visual Basic uit het leerplan 2004/174 (Informaticabeheer) voor het Gemeenschapsonderwijs. In principe is enige voorkennis van programmeren niet noodzakelijk, maar het is toch wel handig indien leerlingen de basisstructuren bij het programmeren niet meer helemaan vreemd zijn. Ik heb voor het publiceren de ganse cursus dubbel nagekeken, maar het blijft natuurlijk mogelijk dat er hier en daar nog kleine foutjes instaan. Gelieve mij daarvoor dan te verontschuldigen. 2. Gebruiksrecht

Deze cursus kon u gratis downloaden van het internet. Mijn idee is: ik heb er zelf redelijk wat tijd ingestoken, en voor mij mogen die inspanningen gerust ook elders lonen. Ik hoef hiervoor geen vergoeding (mocht u mij toch met een attentie willen bedenken, dan hou ik u niet tegen, en mailt u me maar voor de modaliteiten). Wel wil ik u vriendelijk verzoeken om, als u de cursus daadwerkelijk gaat gebruiken, mij een mailtje te sturen om mij te laten weten aan welk publiek en in welk kader u mijn cursus gebruikt. Zo kan ik mijn statistieken up-to-date houden. Bovendien mag u mij gerust uw bemerkingen of kritieken op deze cursus doormailen. Ik sta altijd open voor positief geformuleerde suggesties, en kan op die manier ook de kwaliteit van deze cursus verbeteren. Sommigen onder u hadden mogelijk gehoopt bij deze cursus ook de correcte antwoorden en modeloplossingen voor de oefeningen te krijgen. Die collegas zal ik helaas moeten teleurstellen. Mijn en uw leerlingen zijn geen uilen : zij zullen de website waar deze cursus te downloaden is, ook kunnen vinden, en de antwoorden dan gewoon overnemen, en dat kan niet de bedoeling zijn. Ook via e-mail stuur ik u geen antwoorden. Ik ga ervan uit dat als 16- en 17-jarigen ze zelf moeten kunnen oplossen, dat ook voor u en mij als informaticaleerkracht geen al te groot probleem mag zijn. Het kost slechts een kleine inspanning. U bent vrij om gratis van mijn cursus gebruik te maken, maar dat betekent niet dat ik daarmee afstand doe van mijn auteursrecht. Het vermenigvuldigen van de cursus kan, op voorwaarde dat het enkel om educatieve redenen - en zeker niet met commercile bedoelingen - gebeurt, en onder deze voorwaarden: dat u de cursus, of een deel daarvan, ongewijzigd gebruikt dat u de bron vermeld laat (die staat zowiezo onderaan elke bladzijde) dat u mij via e-mail laat weten voor wie en in welk kader u de cursus gebruikt (zie hierboven)

Mocht u deze cursus op een andere manier dan via het internet onder ogen krijgen, weet dan dat de volledige cursus in PDF-formaat te downloaden is via de website www.marcgoris.be. Marc Goris marc@sitebuilder.be www.marcgoris.be

Juli 2004

www.marcgoris.be

159

You might also like