Hoofdstuk 14 Klassen (Deel 2)

Maat: px
Weergave met pagina beginnen:

Download "Hoofdstuk 14 Klassen (Deel 2)"

Transcriptie

1 Hoofdstuk 14 Klassen (Deel 2) In vorig hoofdstuk hebben we al een belangrijk deel gezien over het gebruik van klassen in VB.net. we hebben al klassen gezien, hoe we met hun eigenschappen (property) werken en hoe we methoden in deze klassen werkten. Echter waren het methoden zonder parameters. In dit gedeelte zullen we tonen dat het niet altijd nodig is om eerst eigenschappen aan te maken en vervolgens waarden aan toe te kennen, om deze te gebruiken in methoden gebruik van de tabcontrol Voor we beginnen aan de eerste oefening gaan we eerst even het TAB-control element bij een formulier uitleggen. We voegen de property tabcontrol toe op een nieuw formulier we zien dat er automatisch 2 tabbladen worden aangemaakt. Om deze tabbladen te benoemen gaan we in de eigenschappen van deze control bij het onderwerp TabPages Fig. 1 Na het drukken op deze krijgen we onderstaande figuur: Fig. 2 Waarbij we in de eigenschap Text de verschillende namen van onze tabbladen invoegen. Uiteindelijk krijgen we dan

2 Fig. 3 De namen van deze tabs zijn respectievelijke tabcirkel en tabrecht. Let wel dat we de tabcontrol de naam geven tbcfiguren. Maak dan de rest van de form op volgens de onderstaande vorm waarbij we erop letten dat we de verschillende objecten juist bepalen. Fig. 4 2

3 Bij het maken van bovenstaande figuur, let er op dat we een picturebox (pctkleur) gebruiken waar we de background instellen op Rood (property), en voor de andere picturebox (pctfiguur) we de background op wit houden. Tevens zorgen we dat we een kleur dialoog toevoegen op de gebruikelijke wijze. Namelijk in dialoog, kleur dialoog aanduiden en verslepen naar onze form. De dialoog zal onderaan het form verschijnen. We geven hem als naam: diakleur oplossen van de oefening De uiteindelijke bedoeling van deze oefening is een klasse te maken die: Op een gegeven object een figuur tekent. De afstand van de linker en de bovenmarge regelt de kleur warmede getekend wordt is dezelfde als de achtengrondkleur, deze kan dan uiteindelijk geregeld worden door middel van de kleurendialoog in samenwerking met de knop lijnkleur. Deze wordt dan bepaald door de dialoog. Tevens wordt de oppervlakte en de omtrek van de figuur bepaald maken van de klasse In eerste instantie zullen we een klasse invoegen (op de gebruikelijke wijze). Deze klasse noemen we vormen. Onderstaande code komt in deze klasse: Public Class Vormen Private PI As Single = Math.PI Public Sub TekenCirkel(ByVal Canvas As Object, ByVal Kleur As Color, _ ByVal Straal As Single, ByVal X As Single, _ ByVal Y As Single) Dim Omtrek, Opp As Single Dim Diameter As Single = Straal * 2 Omtrek = Straal * PI * 2 Opp = Straal * Straal * PI Dim Potlood As New Drawing.Pen(Kleur) Dim Borstel As New SolidBrush(Kleur) Dim Paneel As Drawing.Graphics Dim MyFont = New Font("Arial", 10, FontStyle.Italic) Paneel = Canvas.CreateGraphics Paneel.Clear(Color.White) Paneel.DrawString("Omtrek = " + Omtrek.ToString, MyFont, Borstel, 0, 0) Paneel.DrawString("Oppervlakte = " + Opp.ToString, MyFont, Borstel, 0, 10) Paneel.DrawEllipse(Potlood, X, Y, Straal * 2, Straal * 2) Borstel.Dispose() Potlood.Dispose() Paneel.Dispose() 3

4 End Class Bij de verschillende knoppen zullen we onderstaande code voegen: Knop lijnkleur: Private Sub btnkleur_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnkleeur.click diakleur.color = pctkleur.backcolor If diakleur.showdialog = DialogResult.OK Then pctkleur.backcolor = diakleur.color End If Knop TekenCirkel: Private Sub btntekncirkel_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btntekencirkel.click Dim C As New Vormen C.TekenCirkel(picFiguur, pctkleur.backcolor, Single.Parse(txtStraal.Text), _ Single.Parse(txtLinks.Text), Single.Parse(txtBoven.Text)) In feite is dit een kleine oefening, al het programmeerwerk gebeurt (zoals het zou moeten) in de klasse. Laten we de werking even bekijken: In de klasse zelf zijn er maar 2 objecten aanwezig - een private constante PI (let op binnen de klasse is die publiek) - een methode TekenCirkel die 5 parameters nodig heeft met name 1. Het Canvas komt een object waarop kan getekend worden 2. De kleur waarin getekend zal worden 3. De straal van de cirkel 4. De X afstand 5. De Y afstand Om de figuur te tekenen hebben we een ander object nodig die we hier potlood noemen van het type Drawing.Pen. Als we deze declareren geven we direct de kleur mee waarin we gaan tekenen. Om de tekst uiteindelijk af te drukken heb je nog een object nodig van het type Drawing.SolidBrush. Deze noemen we hier borstel. Eveneens hier geven we de kleur mee waarin de tekst moet geschreven worden. 4

5 Het object waarop getekend moet worden is van het type Drawing.Graphics en noemt hier Paneel. Met de declaratie van MyFont zullen we door het Font type te gebruiken de tekst opmaken. We gaan ook duidelijk maken dat we met paneel eigenlijk een object bedoelen die als parameter wordt doorgegeven (paneel = Canva.CreateGraphics). We zorgen echter ook dat het paneel gewist wordt voordat er op getekend wordt, We geven hiervoor de kleur op waarmede wordt gewist. Eerst schrijven we de omtrek en de oppervlakte op het paneel en dan gaan we de figuur tekenen. Tenslotte mogen we niet vergeten het object variabelen op het einde vrij te geven. Dit gebeurt met de dispose() methode (zie later). Er rest nog enkel de figuur te tekenen met de knop teken cirkel in te drukken. Fig. 5 Als oefening probeert even het probleem met de rechthoek. 5

6 Oefening 2 Bij deze oefening wordt er van u gevraagd om een wiel met een vrij aantal te bepalen spaken te tekenen. Om dit tot een goed einde te brengen zijn er echter een paar zaken waar je rekening moet mee houden, zoals driehoeksmeting. Stel we werken met en cirkel met een straal van 100 (S = 100) dan geld dat: a = cos(30 ) * S b = sin(30 ) * S zie tekening 6

7 s = 100 a =? b =? Er is echter een klein probleem. De functie sin en cos zijn bekend in VB.net echter werken die enkel met Radialen in de plaats van graden. Om deze te berekenen hebben we de formule: Radialen = (Graden * PI)/180. 7

8 14.3 maken van tabellen van een klasse Zoals in bij alle gewone variabelen is het ook mogelijk van tabellen te maken van klassen. Neem aan dat we met behulp van een variabel C een instantie van een klasse maken bvb Dim C as new klassenaam dan spreken we van een object. In dit geval is c een object en niet meer een klasse. Dus in feite maken we hier een tabel van objecten. We moeten dat nu echter wel organiseren in twee stappen: Dim tabel(2) as klassenaam tabel(0) as new klassenaam tabel(1) as new klassenaam tabel(3) as new klassenaam Merk op dat we de eigenschappen van een tabel, steeds beginnen van 0 ook hier gebruiken. Immers een tabel blijft een tabel ook voor objecten. We kunnen natuurlijk ook een lus gebruiken om de tabel te vullen. Dan krijgen we: Dim teller as Integer Dim tabel(2) as klassenaam For teller = 0 to 2 tabel(teller) = new klassenaam next herdimensioneren van een tabel Bij het maken van tabellen hebben we niet speciaal door rekening gehouden met het dimensioneren van de tabel en de mogelijkheden. Tijdens de code is het immers mogelijk om een bestaande tabel in grote te veranderen. We gebruiken daarvoor het commando Redim [Preserve] tabel(tabelgrote) Redim: herdimensioneren van de variabele tabel Perserve (optioneel) wordt gebruikt om de bestaande data in de tabel te bewaren bij het herdimensioneren. tabel(tabelgrote) de tabelnaam (is de oorspronkelijke naam) met de nieuwe grote van de tabel. Een voorbeeld fig. 78 zal dit illustreren: Hierin gaan we een tabel van 3 elementen maken en opvullen met de getallen 0 tot en met 2. Naderhand zullen we dezelfde tabel, herdimensioneren en terug vullen met andere gegevens met en zonder bewaren van de eerste gegevens. 8

9 Fig. 6 Bij behorende code: Public Class Form1 Dim tabel(2) As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim x, y As Integer For x = 0 To 2 tabel(x) = x ListBox1.Items.Add(tabel(x)) Next Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ReDim Preserve tabel(4) tabel(3) = 9 tabel(4) = 10 For x = 0 To 4 ListBox2.Items.Add(tabel(x)) Next Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click ReDim tabel(4) tabel(3) = 9 tabel(4) = 10 For x = 0 To 4 ListBox3.Items.Add(tabel(x)) Next End Class Merk op dat we 1 maal de tabel bepaald hebben in het begin van het ptrogramma, doch dat we steeds die tabel blijven gebruiken. Hij moet echter van hetzelfde type blijven. 9

10 voorbeeld: We gaan een lijst maken van namen voornamen en geboortedatum en gemeente waar ze wonen van de leden van onze klas. Fig. 7 In bovenstaand voorbeeld zal men gebruikmaken van bepaalde mogelijkheden welke we al kennen. We hebben de groepbox gegevens in het maken gedisabeld ( Enable = False). Daardoor kunnen we de tekstvakken niet invullen. Als de gebruiker op Add drukt in de groep gegevens zullen we deze vrij geven zodat we onze tabel kunnen opvullen en de knoppen Bewaar en Cancel ook kunnen gebruikt worden. Op dit moment echter wordt de andere groep ontoegankelijk gemaakt met de zelfde methode. Door het drukken op deze worden ofwel de gegevens bewaard of wel gewist. Bij het drukken op één van deze knoppen zal terug de oorspronkelijke opstelling komen (let wel de tekstboxen worden leeg gemaakt), detail onbereikbaar gegevens bereikbaar. Als men op Save gedrukt heeft zullen de gegevens natuurlijk verschijnen in de listbox lstgegevens. Als men op Edit drukt zal het geselecteerde veld verschijnen in de tekstboxen waar men iets kan veranderen en terug bewaren. Op de 10

11 knop Del zal het geselecteerde gegeven verwijderd worden. Dit lijkt ingewikkeld maar door gebruik van klassen zal dit betrekkelijk eenvoudig worden code: Vooreerst maken we een klasse aan met in te vullen gegevens. Deze gegevens zijn degene dier we aanmaken in onze form via de tekst boxen. We gebruiken een klasse omdat de vraag naar gegevens terugkomt, en voor de goede werking we er een tabel gaan van maken. Public Class gegevens Private prnaam As String Private prvoornaam As String Private prgeboortedatum As String Private prgemeente As String Public Property Naam() As String Get Naam = prnaam End Get Set(ByVal value As String) prnaam = value End Set End Property Public Property VoorNaam() As String Get VoorNaam = prvoornaam End Get Set(ByVal value As String) prvoornaam = value End Set End Property Public Property GeboorteDatum() As String Get GeboorteDatum = prgeboortedatum End Get Set(ByVal value As String) prgeboortedatum = value End Set End Property Public Property Gemeente() As String Get Gemeente = prgemeente End Get Set(ByVal value As String) prgemeente = value End Set End Property Public Function combineer() As String Return prvoornaam + " " + prnaam End Function End Class 11

12 Merk op dat we een functie combineer plaatsen, dit om het juiste formaat in onze listbox te krijgen. Nadien ontwerpen we ons formulier zoals op bovenstaande tekening. In het formulier plaatsen we enkel globale variabelen Dim geg() As gegevens Dim Toevoegen As Boolean Dim aantal As Integer Merk op dat we de tabel geg() maken zonder aanduiding van het aantal elementen. Immers we weten niet hoeveel elmenten we gaan in deze oefening gebruiken. Dit wordt dan zoals we noemen een dynamische tabel waarvan de grote afhangt van aantal die we als integer declareren. De Booleaanse viarabele Toevoegen zal gebruikt worden telkens we op bewaren gaan drukken. Hierna staan al de gebruikte procedure en functies. Private Sub bntvoegtoe_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles bntvoegtoe.click grbgegevens.enabled = False grbdetail.enabled = True btnsave.visible = True btncancel.visible = True Toevoegen = True Call maakleeg() txtnaam.focus() Private Sub maakleeg() txtnaam.clear() txtvoornaam.clear() txtgebdat.clear() txtgemeente.clear() Private Sub btncancel_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btncancel.click Call maakleeg() btnsave.visible = False btncancel.visible = False grbdetail.enabled = False grbgegevens.enabled = True Private Sub vullistbox() Dim T As Integer lstgegevens.items.clear() For T = 1 To aantal lstgegevens.items.add(geg(t - 1).combineer) Next If lstgegevens.items.count > 0 Then lstgegevens.selecteditem = 0 End If 12

13 Private Sub selekteer() Dim Indeks As Integer If lstgegevens.selectedindex >= 0 Then Indeks = zoekindex(lstgegevens.selecteditem) txtnaam.text = geg(indeks).naam txtvoornaam.text = geg(indeks).voornaam txtgebdat.text = geg(indeks).geboortedatum txtgemeente.text = geg(indeks).gemeente End If Private Function ZoekIndex(ByVal waarde As String) As Integer Dim T As Integer For T = 0 To aantal - 1 If geg(t).combineer = waarde Then Return T End If Next End Function Private Sub btnsave_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnsave.click 'Dim ZoekW As String Dim Indeks As Integer If Toevoegen = True Then aantal += 1 Indeks = aantal - 1 ReDim Preserve geg(indeks) geg(indeks) = New gegevens geg(indeks).naam = txtnaam.text geg(indeks).voornaam = txtvoornaam.text geg(indeks).geboortedatum = txtgebdat.text geg(indeks).gemeente = txtgemeente.text Else Indeks = ZoekIndex(lstGegevens.SelectedItem) geg(indeks).naam = txtnaam.text geg(indeks).voornaam = txtvoornaam.text geg(indeks).geboortedatum = txtgebdat.text geg(indeks).gemeente = txtgemeente.text End If Call VulListbox() Call btncancel_click(sender, e) Call selekteer() Private Sub lstgegevens_selectedindexchanged(byval sender As System.Object, ByVal e As System.EventArgs) Handles lstgegevens.selectedindexchanged Call selekteer() Private Sub btnbewerk_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnbewerk.click If (lstgegevens.selectedindex >= 0) Then grbdetail.enabled = True 13

14 grbgegevens.enabled = False Toevoegen = False btnsave.visible = True btncancel.visible = True txtnaam.focus() End If Private Sub btnverwijder_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnverwijder.click Dim Indeks As Integer Dim T As Integer If lstgegevens.selectedindex >= 0 Then If MsgBox("mag dit gegeven verwijderd worden?", _ MsgBoxStyle.YesNo + MsgBoxStyle.Question + _ MsgBoxStyle.DefaultButton2, "gegeven wissen") = MsgBoxResult.Yes Then Indeks = ZoekIndex(lstGegevens.SelectedItem) For T = Indeks To aantal - 2 geg(t) = geg(t + 1) Next aantal -= 1 ReDim Preserve geg(aantal) Call vullistbox() End If End If Het moeilijkste van dit programma is de code bij de knop bewaar. Dit vraagt om enige verduidelijking: Als de gebruiker op het bewaar drukt dan zal hij verschillende zaken beogen. Eerst wordt er nagegaan als het om een toevoeging gaat dan wel over een verandering. Daarvoor gebruiken we de booleaanse variabele. Bij een wijziging moet het bestaande veld overschreven worden. Om vast te stellen dat het om een toevoeging gaat zullen we de variabele op true zetten. Als we edit programmeren zetten we deze variabele eerst op false. Als we toevoegen dan zal aantal met 1 verhgogen, de tabel zal opnieuw gedimensioneert worden, we initialiseren een nieuw element en voegen de velden toe. Gaan we echter een veld bewerken, dan zoeken we eerst op om het hoeveelste element in de tabel het gaat en we zorgen dat deze overschreven wordt. Een nadenkertje. De elementen staan niet altijd zoals opgeven in onze listbox. Het is mogelijk dat in onze liestbos de elementen gesorteerd zijn, dat zal niet zo zijn bij het inlezen van onze tabel! Hierbij is ons programma gedaan. Natuurlijk als u de ingebrachte gegevns wil bewaren moeten we er nog iets bij maken. Het bewaren in tabellen dat is voor het ogenblik nabije toekomst muziek! Nu gaan we ze opslaan in, jawel, een bestand. Daarvoor gaan we eerst iets 14

15 in een bestand leren plaatsen. Na het volgende hoofdstuk komen we terug op deze oefening om de gegevens in een bestand te plaatsen en zo onze oefening te vervoledigen. 15

16 Hoofdstuk 15 Dialoogvensters Het is natuurlijk niet allemaal kommer en kwel met VB.net. Er bestaan ook leuke zaken in deze omgeving. Daar gaan we nu een en paar van zien. Natuurlijk zijn die niet allemaal zo eenvoudig te begrijpen, maar wel soepel te hanteren. Veelal is dat je van uit je programma s hulp kunt gebruiken van de OS. Deze hulp wordt u aangeboden langs dialoogvensters. Als u bij gebruik van uw programma aan de gebruiker de mogelijkheid wilt geven fonts aan te passen of eventueel kleurtjes aan te passen kunt u gebruik maken van bestaande mogelijkheden van uw besturingssoftware. Visual studio geeft u de mogelijkheid om te werken met onderstaande dialoogvensters - Color - Font - Open - Save - Print In sommige oefeningen vroeger hebben we al gewerkt met deze dialoogvensters, ik denk bij voorbeeld aan de oefening met de cirkels. Dat was een leuk iets en we kunnen dit even nader bekijken Dialoogvenster Color Fig. 8 16

17 We maken een formulier zoals in figuur 80. Eerst plaatsen we daar een knop op btnkleur ( kleur ) en een textveld txtkleur met multiline = true. In onze toolbox zien we het onderdeel staan dialoog.(fig81) dat openen we en zien we daarin verschillende dialogen staan. Fig. 9 We nemen color dialog en plaatsen dat op onze form. Onmiddellijk zal dat naar beneden schuiven. We geven deze dialoog(properties) de naam cdlkleur. De bedoeling is nu als de gebruiker op de knop klikt dat hij ken kiezen tussen de kleuren die aangeboden worden door het OS. Daarvoor moet u in de knop het volgende programmeren: Private Sub btnkleur_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnkleur.click cldkleur.color = txtdialoog.backcolor cldkleur.allowfullopen = True If cldkleur.showdialog = Windows.Forms.DialogResult.OK Then txtdialoog.backcolor = cldkleur.color End If Fig

18 Bovenstaande figuur is het resultaat en als je op een kleur drukt zal je zien dat het tekstvak veranderd van kleur Dialoogvenster font Fig. 11 We breiden onze figuur uit met een knop Font. Nadien gaan we ook het dialoogvenster Font inbrengen en noemen het cldfont de knop programmeren we als volgt: Private Sub btnfont_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnfont.click cldfont.font = txtdialoog.font cldfont.showcolor = True cldfont.color = txtdialoog.forecolor cldfont.showapply = True If cldfont.showdialog = Windows.Forms.DialogResult.OK Then txtdialoog.font = cldfont.font End If En we testen 15.3 Dialoogvenster OpenFileDialoog Met deze kan je toegang krijgen tot mappen en bestanden die op je schijf staan. Met deze kunnen we tekstbestanden, bat bestanden, ini bestanden openen en afbeelden in en tekstvenster.. Om deze te gebruiken moeten we nog een speciaal object aanspreken namelijk het StreamReader object. Later zal dat nog ter sprake komen maar hier volstaat het dat u de code kent om een bestand te openen en te brengen naar een tekstbox. Die code is: 18

19 Dim SR as System.IO.StreamReader SR = System.IO.File.OpenText( c:\windows\win.ini) txttekst.text = SR.ReadToEnd() Fig. 12 Op ons bestaand formulier gaan we een knop Open (btnopen) plaatsen en de dialoogbox OpenFileDialog toevoegen. We geven deze als naam cldopen Anders dan bij de ander dialogen gaan we nu even stilstaan bij enkel eigenschappen van deze dialoog, welke kunnen belangrijk zijn bij het bewaren van bestanden AddExtension Deze is enkel van belang als we een bestand willen bewaren. Deze Boole- waarde bepaald enkel als het dialoogvenster automatisch een extensie aan het bewaarde bestand zal toekennen. Dit wordt bepaald door de DefaultExtension, die moet worden ingesteld voor men de showdialoog aanroept CheckFileExist Anders dan in de taal C zal men hier niet expliciet moeten checken als het bestand bestaat. We kunnen terug een vlag instellen die aangeeft als het bestand al dan niet bestaat in het pad dat de programmeur aangeeft FileName Deze eigenschap is het toegangspad van het bestand dat de gebruiker in het besturingselement heeft geselecteerd. 19

20 Filter Met deze eigenschap zal men het type van bestanden die men wil zien, aanduiden. Het pijp symbool ( ) zal de beschrijving van het symbool, dat wat de gebruiker ziet, scheiden van dat wat de computer zal onderscheiden. Verder komen we daar nog op terug FileNames Als de dialoog meerdere bestanden toelaat zal deze eigenschap de padnamen van de bestanden bevatten Er zijn nog verschillende andere eigenschappen maar deze hebben we nu niet nodig. Bij gebruik ervan zullen ze wel toegelicht worden de code bij de knop open: Private Sub btnopen_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnopen.click Dim mystreamreader As System.IO.StreamReader Dim BestandsNaam As String cldopen.initialdirectory = Application.ExecutablePath If cldopen.showdialog = DialogResult.OK Then BestandsNaam = cldopen.filename mystreamreader = System.IO.File.OpenText(BestandsNaam) txtdialoog.text = mystreamreader.readtoend mystreamreader.close() mystreamreader.dispose() End If In deze code staan er nog een aantal speciale zaken. Één ervan is mustreamreader.close Anders dan bij vele talen moet je ook hier na lezen het bestand sluiten en met mystreamreader.dispose zal je het geheugen opkuisen. Belangrijk voor de snelheid van uw computer. Fig

21 Figuur 85 geeft een bestand die ik gelezen heb van op mijn computer 15.4 Dialoogvenster Save Deze werkt bijna identiek als de vorige. Met deze kunnen we het tekstvak dat we hebben opslaan op de computer. We plaatsen een knop bij op ons formulier en gaan het dialoogvenster gaan halen in onze toolbox. We geven het de naam cldsave. We gaan ons echter beperken tot het opslaan van de inhoud van een tekstvak op te slaan als tekstvak. Daarvoor gaan we terug een andere dialoog controle opslaan namelijk de SaveFileDialog. Even als de andere halen we deze ook vanuit onze toolbox en plaatsen deze op het formulier, en geven die de naam cldsave. Fig. 14 We gaan terug een opslaan knop (btnsave) in ons formulier introduceren en daaraan hangen we onderstaande code: Fig. 15 Dim Bestnaam As String Dim SW As System.IO.StreamWriter If cldsave.showdialog = DialogResult.OK Then Bestnaam = cldsave.filename If System.IO.File.Exists(Bestnaam) Then If MsgBox("Bestand bestaat reeds! Overschrijven?", _ MsgBoxStyle.YesNo, "save") <> MsgBoxResult.Yes Then Exit Sub End If End If SW = System.IO.File.CreateText(Bestnaam) SW.Write(txttest.text) SW.Flush() 21

22 stream 'plaats de inhoud van de gebruikte buffer en schrijft het naar de SW.Close() End If We zien wel dat we geen keuze hebben in het opslaan van ons bestand. Om dat te bekomen moeten we iets veranderen in de eigenschappen van ons dialoog venster. Bij het gedeelte filter van de eigenschappen van ons dialoog gaan we invullen welke extensie we willen. In ons geval tekstbestand en daarbij een rechte separator en *.txt. Daardoor wordt het opgeslagen als txt bestand. Nog iets waar men moet opletten is dat we OverWritePrompt steeds op False plaatsen. Immers, anders heeft onze if structuur in onze code geen zin. Gebruiken we per ongeluk een zelfde naam zal het op te slaan bestand het andere automatisch overschrijven het dialoogvenster printer Vroegere programmeurs in VB zullen beamen dat het printen in deze taal een hekelpunt is. In de versie VB.Net is er al een en ander ten goede veranderd, maar ondanks dat blijft het toch steeds een behelpen. Microsoft zelf stelt voor om als men veelvuldige rapportage en afdruk van gegevens moet doen gebruik te maken van software van derden. Verder op zullen we uitgebreid ingaan op het afdrukken van gegevens. Hier zullen we ons beperken tot het afdrukken van de inhoud van een tekstvakje. Breng op het formulier nog een knop (btnafdrukken) en plaats vervolgens het afdrukdialoog printdialog en geef het de naam cldprint. Plaats tevens de dialoogcomponent PrintDocument op de form en geef het de naam PrintDoc. Fig

23 Let op: het enige dat het besturingselement Printdialog doet is het tonen van de beschikbare printers (+ een paar instellingen) op het scherm. Ondanks de naam zal dit element NIET instaan voor de afdruk. Deze moeten we programmeren. Daarvoor bestaat er een nieuw element in VB.Net namelijk PrintDocument. Deze zal zorgen dat u alle printopdrachten kunt afwerken. Let wel zonder dit object kunt u niet afprinten Voeg onderstaande code toe aan de knop om te printen alsook aan het printdocument dialoog. Om daar een code aan toe te voegen dient u enkel te dubbelklikken op de PrintDoc element Private Sub btnafdruk_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnafdruk.click cldprint.allowprinttofile = False cldprint.allowselection = False cldprint.printersettings = _ New System.Drawing.Printing.PrinterSettings If cldprint.showdialog = DialogResult.OK Then PrintDoc.PrinterSettings.PrinterName = _ cldprint.printersettings.printername() PrintDoc.Print() End If Private Sub PrintDoc_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDoc.PrintPage Dim printfont As New Font("Verdana", 10, GraphicsUnit.Point) e.graphics.drawstring(txttest.text, printfont, Brushes.Black, 20, 20) e.hasmorepages = False End Class 23

24 Hoofdstuk 16 Klassen (deel3) In vorige beschouwingen hebben we steeds beweerd dat een klasse een op zichzelf staand programma is. Dit houdt dan in als je een methode uit een klasse lanceert deze code uitgevoerd wordt als een apart proces naast het programma dat u al aan het uitvoeren bent. Zo een proces dat op zichzelf draait noemt men een thread. Dus als u een programma aan het draait en u start een methode uit een klasse vanuit dat programma, dan zullen er 2 processen of 2 threads (draden) draaien. Voorheen hebben we daar nog niet bij stilgestaan, echter dat gebeurde ook. Omdat ons programma moest wachten tot de thread welke door de klasse was begonnen beëindigd was, hebben we hier ook niets voor gedaan. Stel dat de thread dat u opstart vanuit uw programma een lange verwerkingstijd nodig heeft en u de gebruiker gedurende die tijd de kans wil geven iets te doen met zijn programma, hoe kan u dit oplossen? In dit geval moet u voorzieningen treffen dat een bepaalde thread niet al de processor tijd opneemt. Men zegt in dit geval dat we aan moeten Multi-threading moet doen. Er wordt wel beweerd dat Windows een Multi-threading systeem is, maar u zult onmiddellijk bemerken dat dit in de praktijk niet zo evident is. Neem nu dat we een programma willen ontwerpen die met behulp van de recursieve methode de volgende zaken moet oplossen. - Opzoeken van een gegeven map het aantal submappen - Opzoeken van het aantal bestanden in deze - Opzoeken van het aantal bytes in die bestanden Volgens het aantal informatie dat op u te onderzoeken schijf staat kan dit eventueel vele seconden en zelfs minuten voor nodig heeft Dit programma zal zeker proberen dit zo vlug mogelijk tot een goed eind te brengen en zal u de indruk kunnen geven dat het programma de computer doet vast lopen dit zal zo blijven tot de methode afgelopen is. Maar omdat Windows nu een Multi-threading operating system is, is het toch mogelijk om de beschikbare processor tijd te verdelen over de verschillende threads die uw programma start. Het is nu aan u de programmeur er voor te zorgen dat de threads de processor tijd verdelen onder elkaar. Je kunt immers stellen dat de threads een egoïstische karaktertrek 24

25 hebben en alles zoveel veel mogelijk voor hen willen. Om dit op te lossen hebben we een instructie die we in onze methode kunnen steken namelijk: Application.DoEvent() Deze instructie organiseert een software interrupt die op zijn beurt ervoor zorgt dat andere programma s of andere threads in het zelfde programma ook een tijdje de kans krijgen hun eigen instructies uit te voeren. We spreken hier van context-switch. Een klein voorbeeld We gaan een project maken die een klasse bevat die van een gegeven map de gegevens gaat onderzoeken. We ontwerpen een form zoals in de figuur Fig. 17 Dit bestaat uit de tekstvakken txtmap1..3, btnmap1..3, btnmap1..3zoek en lblresult1..3. Bij die form voegen we de dialoog FolderBrowser en noemen die FBrowser. Die zal zorgen dat we een map kunnen selecteren in uw systeem of zelfs in een netwerk. De belangrijkste eigenschap van deze is SelectedPath. Met deze kan men een bepaalde map sturen en eventueel uitlezen. Als men klikt op de knop btnmap1..3zoek zal Fbrowser een dialoogvenster openen waarin een bepaalde map kan geselecteerd worden. Deze dient dan te verschijnen in de aanvullende 25

26 tekstvakken, txtmap1.3. Let op om dat voor alle 3 de knoppen hetzelfde is zal men dat schrijven in 1 Event. Private Sub btnmapzoek_click(byval sender As System.Object, ByVal e As System.EventArgs) _ Handles btnmap1zoek.click, _ btnmap2zoek.click, _ btnmap3zoek.click Dim TekstVak As TextBox If sender Is btnmap1zoek Then TekstVak = txtmap1 End If If sender Is btnmap2zoek Then TekstVak = txtmap2 End If If sender Is btnmap3zoek Then TekstVak = txtmap3 End If If TekstVak.Text <> "" Then Fbrowser.SelectedPath = TekstVak.Text End If If Fbrowser.ShowDialog = Windows.Forms.DialogResult.OK Then TekstVak.Text = Fbrowser.SelectedPath End If Fig. 18 Om echter te weten welke van de drie knoppen ons daartoe zal brengen en de juiste geselecteerde mappen in de juiste tekstvakken te plaatsen onderzoeken we de parameter sender. Let op: om sender (een object) te vergelijken met een knop mag men niet de booleaans variabele = gebruiken als symbool maar het sleutelwoord Is In de volgende code die staat bij de knoppen btnmap1..3 hebben we het zelfde fenomeen Private Sub btnmap_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnmap1.click, _ btnmap2.click, _ btnmap3.click Dim TekstVak As TextBox Dim labelvak As Label Dim D As New DiscScanner If sender Is btnmap1 Then TekstVak = txtmap1 labelvak = lblresult1 End If If sender Is btnmap2 Then TekstVak = txtmap2 26

27 Fig. 19 labelvak = lblresult2 End If If sender Is btnmap3 Then TekstVak = txtmap3 labelvak = lblresult3 End If labelvak.text = D.ScanDir(TekstVak.Text) D = Nothing Merk op dat we in deze code een klasse ScanDir oproepen. Deze zullen we ook moeten construeren. We werken met 4 private variabelen: Public Class DiscScanner Private pr_aantalbestanden As Long Private pr_aantaldirectories As Long Private pr_aantalbytes As Long Private pr_mapnaam As String fig. 20 Hoewel het niet speciaal nodig is (en we gaan er ook hier geen gebruik van maken) leek het me toch in het licht van andere volgende oefeningen, de variabelen ReadOnly te maken. ReadOnly Property AantalBestanden() As Long Get AantalBestanden = pr_aantalbestanden End Get End Property ReadOnly Property AantalDirectories() As Long Get AantalDirectories = pr_aantaldirectories End Get End Property ReadOnly Property MapNaam() As String Get MapNaam = pr_mapnaam End Get End Property fig. 21 Als volgende hebben we de methode ScanDir. Deze methode verwacht een parameter, de te onderzoeken map, en zal een rapportje terug geven. Zo niet zal het de mededeling geven dat we een ongeldige map aan het bekijken zijn. Het is in feite de bedoeling deze controle recursief te laten gebeuren. Daarom zullen we het zoekwerk niet in deze methode laten gebeuren. Het is immers denkbeeldig dat vanuit de methode SacnDir zich zelf oproept. Daarom zetten we van in het begin de tellers op 0 zodat bij herhaalde oproep de tellers niet meer ge updatet worden. Dit geeft echter als negatief 27

28 punt dat we deze methode niet meer kunnen recursief benaderen (waarom?) Inderdaad dar de tellers steeds op 0 geplaatst worden zouden de resultaten niet meer kloppen Public Function ScanDir(ByVal InitialDirectory As String) As String Dim Rapport As String pr_aantaldirectories = 0 pr_aantalbestanden = 0 pr_aantalbytes = 0 pr_mapnaam = InitialDirectory If IO.Directory.Exists(pr_Mapnaam) Then OnderzoekMap(pr_Mapnaam) Rapport = "resultaat" & pr_mapnaam & vbcrlf Rapport = Rapport + "aantal mappen: " & pr_aantaldirectories.tostring + vbcrlf Rapport = Rapport + "aantal bestanden: " & pr_aantalbestanden.tostring + vbcrlf Rapport = Rapport + "aantal bytes: " & pr_aantalbytes.tostring Return Rapport Else Return ("ongeldige map op gegeven") End If End Function fig. 22 Daarom gaan we de berekening laten gebeuren in een andere private functie. Deze functie noemt OnderzoekMap() Private Function OnderzoekMap(ByVal map As String) Dim Bestandsnaam As String Dim Mapnaam As String Dim fi As IO.FileInfo For Each Bestandsnaam In IO.Directory.GetFiles(map) pr_aantalbestanden += 1 fi = New IO.FileInfo(Bestandsnaam) pr_aantalbytes = pr_aantalbytes + fi.length Application.DoEvents() Next For Each Mapnaam In IO.Directory.GetDirectories(map) pr_aantaldirectories += 1 OnderzoekMap(Mapnaam) Application.DoEvents() Next End Function fig. 23 Als u het programma uitvoert zal men kunnen 3 maal tegelijkertijd een map onderzoeken. Door het gebruik van de methode ApplicationDoEvents() kunnen we dat doen. Als u deze zou weg doen dan kan men zelfs geen tweede zoekactie starten! Probeer dit maar uit. 28

29 2. Instanties Als men vanuit een programma een klasse willen gebruiken zullen we dat organiseren als volgt: Dim d as New MijnKlasse. In dit geval zeggen we dat de een instantie is van de klasse. In feite is een instantie niet meer dan een kopie van mijn klasse die we dan kunnen gebruiken. Herinneren we ons de twee plaatsen in het geheugen waar we onze informatie opslaan. Namelijk de stack en de heap. De stack zorgt er voor dat we iedere variabele die we declareren en plaats geven. Deze plaats wordt de grootte van wat we aanvragen (bvb Integer of string, of long enz).zodra die variabele afsterft, zal de plaats terug (automatisch) vrijgegeven worden. Als men echter een objectvariabele aanmaakt (instantie creëert van een klasse) wordt die kopie op de heap geplaatst en niet op de stack. Bvb dim c as new Cirkel zorgt er voor dat een kopie van de klasse cirkel op de heap geplaatst wordt. Let wel ogenblikkelijk wordt er voor iedere gedeclareerde variabel uit die klasse een ruimte gereserveerd op de stack! Stel dat je twee copies van die klasse dient aan te maken. Logisch zal je denken dat er direct 2 copies op het heap zal geplaatst worden met de nodige plaatsen op de stack. Toch niet! Immers er staat al een code van die klasse op de heap. Op de stack echter worden er wel een tweede set variabelen aangemaakt en geïnitialiseerd met 0. Stel nu de methode cirkel enkel uit 1 property (variabele) bestaat Public Class cirkel Public Straal as Double End Class Declareren we: Dim c1 as New Cirkel wordt de code op de Heap geplaatst. Op het zelfde moment wordt er een plaats op de stack gereserveerd voor de variabele straal en geïnitialiseerd met 0. Als we nu het volgende declareren: Dim c2 as new Cirkel wordt de code niet meer op de heap geplaatst (immers de code bestaat al). Maar wel wordt er een nieuwe variabele Straal op de stack gemakt en geïnitialiseerd met 0. Breiden we onze klasse uit met een methode die de diameter berekend (straal * 2) 29

30 Public Class cirkel Public Straal As Double Public Function Diameter() As Double Dim getal As Integer Getal = 2 Return Getal * Straal End Function End Class Onze programma doet nu het volgende: Dim c1 As New Cirkel (1) Dim c2 As New Cirkel (2) c1.staal = 5 (3) c2.straal = 8 (4) MsgBox(c1.Diameter)) (5) msgbox(c2.diameter)) (6) (1) Er word teen copie van cirkel op de heap geplaatst. Onmiddellijk wordt er op de stack een plaats voor de variabele c1 (double) gemaakt en geïnitialiseerd met 0. (2) Hier wordt geen nieuwe copie op de heap geplaatst meer wel wordt c2 aangemaakt. (3) De variabele c1 wordt gevuld met 5 (4) De variabele c2 wordt gevuld met 8 (5) De methode diameter vanuit de eerste copie wordt uitgevoerd en dit met c1 die op de stack geplaatst was. De berekening wordt uitgevoerd en het resultaat getoond. De methode is teneinde en het variabele getal, gereserveerd ten behoeve van c1 wordt vrijgegeven. (6) De methode diameter vanuit de tweede copie wordt uitgevoerd en dit met c2 die op de stack geplaatst was. De berekening wordt uitgevoerd en het resultaat getoond. De methode is teneinde en het variabele getal, gereserveerd ten behoeve van c2 wordt vrijgegeven. Wat gebeurd er nu met de heap en de variabelen(c1 en c2)die op het stack staan? Wel die plaatsen op de stack worden vrij gegeven bij het einde van hun bereik. Het object op de heap blijft echter wel bestaan. Immers het kan zijn dat je die cirkel verder in het programma dient te gebruiken. Echter geen nood de.net makers hebben daar rekening mee gehouden. Dart door het maken van GC of garbage collector (vuilbak). De GC gaat regelmatig het heap onderzoeken en kijken als de objecten welke er op staan nog gebuikt worden (zijn de 30

31 instanties nog actief?) en moet hij daar nog blijven. Zo niet wordt hij automatisch weggenomen. Men kan wel de GC een beetje helpen indien nodig. Dit door te schrijven: c1 = NOTHING c2= NOTHING Dit wil niet zeggen dat de code van het heap moet verdwijnen maar dat de gegeven variabele niet meer nodig is, zodat de GC zelf dat niet meer moet nakijken. Als dit laatste fenomeen zich voordoet, dan wordt, natuurlijk indien aanwezig, de code van de finalize routine uitgevoerd. Protected Overrides Sub Finalize(). Messagebox.Show( Slaapwel van + pr_naam 3. gedeelte eigenschappen De aanwezigheid van gedeelde eigenschappen is het beste bewijs dat de klasse maar 1 maal op de heap geplaatst wordt. Deze eigenschappen( variabelen) worden slechts 1 maal aangemaakt. Dat wil zeggenvoor deze eigenschappen wordt er maar ruimte voorzien voor 1 set op de stack. We gaan dit declareren met het sleutel woord Shared. Voorbeeld: Public Class DiscScanner Private pr_aantalbestanden As Long Private pr_aantaldirectories As Long Private pr_aantalbytes As Long Private pr_mapnaam As String Public Shared AantalGebruikers As Integer fig. 24 Telkens we de methode scandir wordt uitgevoerd gaan we deze variabele verhogen met 1 Public Function ScanDir(ByVal InitialDirectory As String) As String Dim Rapport As String pr_aantaldirectories = 0 pr_aantalbestanden = 0 pr_aantalbytes = 0 pr_mapnaam = InitialDirectory AantalGebruikers += 1 If IO.Directory.Exists(pr_Mapnaam) Then fig. 25 Men zorgt voor een knop bij het form gedeelte en voegt er de code in figuur 27 toe 31

32 Fig. 26 Private Sub btnaantalgebruikers_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnaantalgebruikers.click Dim vraag As New DiscScanner MessageBox.Show(vraag.AantalGebruikers) vraag = Nothing fig. 27 Als laatste voer uw programma uit en bekijk het resultaat. 4. Encapsulation en Overloading Tot op dit ogenblik zijn onze klasse nog altijd rechtlijnig geprogrammeerd. In feite wijkt dat eigenlijk niet af van het gewone programmeren in VB6. Dan rijst de vraag waarom klassen maken, zonder zou het merkelijk gemakkelijker zijn, is het niet? Een belangrijk voordeel hebben we al besproken, namelijk de herbruikbaarheid van deze klassen. Eenmaal een klasse gemaakt kunnen we met een paar ingrepen een DLL-bestand (Dynamically Linked Lirary). Het is ook natuurlijk mogelijk om code te copieren en plakken in de verschillende programma s, maar wat gebeurt er dan als er een fout zit in een van de methoden van de klasse, of dat re wijzigingen moeten aangebracht worden? Als u niet met klassen werkt moet men gans het programma onderzoeken waar de code overal staat om ze te veranderen. Als men een klasse heeft geschreven dan volstaat het eenmaal de klasse aan te passen en het euvel is opgelost. Een tweede voordeel van de klassen is Encapsulation of inkapseling Dit wil zeggen dat de ontwikkelaar van de klasse zelf beslist wat de wereld buiten het programma kan zien. De gebruiker zal dan enkel moeten weten wat hij naar de klasse stuurt en wat hij zal terug krijgen. Het is dan wel de verantwoordelijkheid van de ontwikkelaar van e klasse dat, eenmaal de klassen gebruikt in andere projecten of door andere gebruikers men niet meer afwijkt van de functionaliteit van de klasse. D.w.z dat als een methode van de klasse bijvoorbeeld een 32

33 waarde teruggeeft van het type integer u morgen niet mag beslissen dat het een gegeven is van het type string. Wel kan men in extremis de klasse uitbreiden, zolang u er maar voor waakt dat de oorspronkelijke methode blijft functioneren. Stel dat je een klasse bereken hebt gemaakt met de functie dat een getal verdubbelt: Public Function vedubbel(byval waarde As Double) As Double Return waarde = waarde * 2 End Function fig. 28 Nadat de functie een tijdje in gebruik is vind je het wenselijk aan deze een tweede functie toe te voegen waar een omzetting van type in verwerkt is. Public Function vedubbel(byval waarde As Double) As Double Return waarde = waarde * 2 End Function Public Function verdubbel(byval str_waarde As String) As Double If IsNumeric(str_waared) Then Return Double.Parse(str_waarde) * 2 Else Return 0 End If End Function fig. 29 Bij een nieuwe implementatie van de klasse kan men kiezen tussen de twee manieren. 5. overerving Uit de stelling hierboven gaan we uit van het feit dat voor iedere uitbreiding van de klasse de programmeur, hoe klein die ook mag zijn, er een uitbreiding moet worden geschreven. Dat zou een Beetje te ingewikkeld zijn. Een eigenschap die ook te gebruiken is, maakt dat bij het schrijven van een klasse men de functionaliteit van een bestaande klasse kan overnemen, zonder dat de andere klasse in functionaliteit inboet. Om dit principe te benaderen zullen we een voorbeeld uitwerken. Daarin moeten we één ding voor het moment aannemen dat een ArrayList een dynamische Array is dat om het even welk object kan bevatten. Een ArrayList beschikt een heleboel methoden, maar het beschikt niet over een methode die dubbele waarde verwijdert uit de lijst. Dit gaan we er bij maken. Maak een project aan en voeg er een klasse aan toe: MyArrayList. Koppel nu Arraylist aan uw klasse met de term Inherits. Bij de functie Inherits of overerving zal uw klasse al de methodes van die andere klasse zich eigen maken en klaar maken om te gebruiken. Laat ons eens dat voorbeeld bekijken. 33

34 Fig. 30 We maken een form met 2listboxen en een knop (zie figuur). We maken aan dit project zoals voordien gezegd een klasse met erving van functies door de Klasse ArrayList op volgende wijze: Public Class myarraylist Inherits ArrayList Public Sub VerwijderDuplicaten() Dim Teller1 As Integer = 0 Dim teller2 As Integer = 0 Dim aantal As Integer = 0 aantal = MyBase.Count - 1 Dim Waarde As String Do While Teller1 < aantal Waarde = MyBase.Item(Teller1) teller2 = Teller1 + 1 Do While teller2 <= aantal If MyBase.Item(teller2).ToString = Waarde Then MyBase.RemoveAt(teller2) aantal -= 1 teller2 -= 1 End If 34

35 End Classfig. 31 teller2 += 1 Loop Teller1 += 1 Loop Merk op dat op het moment dat we ArrayList er aan toevoegen we al in onze form kunnen gebruik maken van al de eigenschappen van de klasse ArrayList. Probeer maar eens ja zal het wel zien. Onze form geven we de onderstaande code: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load lsta.items.add("a") lsta.items.add("b") lsta.items.add("c") lsta.items.add("a") lsta.items.add("c") lsta.items.add("a") lsta.items.add("c") lsta.items.add("b") lsta.items.add("z") lsta.items.add("c") lsta.items.add("a") lsta.items.add("8") lsta.items.add("5") lsta.items.add(5) lsta.items.add(8) lsta.items.add(6) lsta.items.add(8) lsta.items.add(5) fig. 32 Door deze code zullen we zien dat er een bepaald aantal gegevens in onze listbox komen. Door nu de knop te programmeren zien we dat sommige zullen overgezet worden naar de volgende listbox, de dubbele gegevens zullen niet overgeplaatst worden Private Sub btnschuif_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnschuif.click lstb.items.clear() Dim ma As New myarraylist ma.addrange(lsta.items) ma.verwijderduplicaten() lstb.items.addrange(ma.toarray) ma = Nothing fig. 33 Uiteindelijk komen we het volgende uit: 35

36 Fig

37 Hoofdstuk 17 Werken met meerdere formulieren (uitbreiding) In vorig hoofdstuk 12 hebben we al gewerkt gebruikmakend van meerdere formulieren. Onze programma s waren opgebouwd uit het SDI 1 principe. Dit werd bekeken als een afzonderlijk proces. U kunt dat best bekijken dat u een ander formulier opent zal u een ander icoontje maken in Windows Show en ShowDialog Vooraleer we een nieuw formulier maken zullen we eerst moeten objectvariabele maken om naar ons nieuw formulier te verwijzen. Natuurlijk want ieder formulier zal fungeren als klasse. Stel we maken een project bestaand uit 2 formulieren. In het eerste formulier plaatsen we een knop en in zijn handler plaatsen we: Dim f as new form2 Wilt u nu uw formulier starten dan zal je moeten inbrengen: f.show() of f.showdialog. Het verschil tussen beide commando s: Bij ShowDialog kan men form1 niet meer gebruiken zolang form2 open staat, wat men wel kan als men show gebruikt. Daar we werken met een verwijzing naar een object is het mogelijk verschillende malen dit object te openen (zie vroeger). Dit is wel niet gebruikelijk maar het kan voorkomen dat men het moet doen Voorbeeld project Maak een nieuw project aan volgens onderstaande figuur 1 SDI = Single Document Interface 37

38 Fig. 35 Maak het menu structuur als volgt: MenuItem Bestand Openen Opslaan naam mnubestand mnuopen mnuopslaan - nvt Afsluiten mnuafsluiten 38

39 Bewerken Kopiëren Knippen Plakken Nieuw Formulier mnubewerken mnukopiëren mnuknippen mnuplakken mnunieuwformulier Het is de bedoeling dat we met dit programma tekstbestanden kunnen opvragen of teksten in een bestand kunnen opslaan. We doen dit met behulp van het Streamwriter en het StreamReader Object. Het uiteindelijk lezen van- en bewaren van de gegevens in een bestand gaan we natuurlijk regelen in een klasse. Maak daarom in uw project een klasse clstxtreadwrite aan met onderstaande inhoud: Public Class clstxtreadwrite 'klasse voor lezen en schrijven van een bestand Public Function LeesBestand(ByVal bestandsnaam As String) As String Dim SR As System.IO.StreamReader 'vaiabele om te lezen (StreamRead) Dim Retour As String If System.IO.File.Exists(bestandsnaam) Then 'controleren als het bestand bestaat Sr = System.IO.File.OpenText(bestandsnaam) Retour = SR.ReadToEnd 'lezen bestand en terugsturen Sr.Close() Else Retour = "" 'bij geen bestand ledige string terug sturen End If SR = Nothing 'verwijderen van SR uit het geheugen Return Retour End Function Public Sub SchrijfBestand(ByVal bestandsnaam As String, ByVal inhoud As String) Dim SW As System.IO.StreamWriter SW = System.IO.File.CreateText(bestandsnaam) 'creëren van bestand op schijf SW.Write(inhoud) 'inschrijven van de inhoud in het geheugen SW.Flush() 'inhoud van het geheugen naar de schijf voeren SW.Close() 'sluiten van het bestand SW = Nothing End Class Nadien gaan we de verschillende menu items programmeren. Code van mnuopen: 39

40 Private Sub mnuopen_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles mnuopen.click If cdlopen.showdialog = Windows.Forms.DialogResult.OK Then Dim LB As New clstxtreadwrite 'instantie maken van de klasse txtinhoud.text = "" 'textvak ledigmaken txtinhoud.text = LB.LeesBestand(cdlOpen.FileName) 'inhoud van text erin plaatsen LB = Nothing 'variabele ledigmaken End If Code mnuopslaan Private Sub mnuopslaan_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles mnuopslaan.click If cdlsave.showdialog = Windows.Forms.DialogResult.OK Then Dim LB As New clstxtreadwrite 'instantie maken van de klasse LB.SchrijfBestand(cdlSave.FileName, txtinhoud.text) ' de inhoud van het tekstvak opslaan LB = Nothing 'variabele ledig maken End If Code mnukopieeren Private Sub mnukopiëren_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles mnukopiëren.click Clipboard.SetDataObject(txtInhoud.Text) Code mnuknippen Private Sub mnuknippen_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles mnuknippen.click Clipboard.SetDataObject(txtInhoud.Text) txtinhoud.text = "" deze twee code zijn quasi het zelfde, met dien verstande dat bij ghet knippen de uiteindelijke tekst verdwijnt uit het tekstvak, in tegenstelling tot kopiëren. Code mnuplakken Private Sub mnuplakken_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles mnuplakken.click Dim CB_lezer As IDataObject = Clipboard.GetDataObject() If CB_lezer.GetData(DataFormats.Text) Then txtinhoud.selectedtext = CB_lezer.GetData(DataFormats.Text) End If 40

41 Voor de volledigheid moeten we nog een code toeveoegen in het loadevent van ons formulier. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "Document" + docteller.tostring docteller += 1 Bij ons formulier gaan we nog iets voegen, namelijk een module. In een module kunnen we variabelen declareren die kunnen gebruikt worden doorheen gans het project, als men ze public gedeclareerd heeft. In dit geval zullen we docteller public declareren. Module Module1 Public docteller As Integer = 1 End Module We gaan nu het nieuw formulier declareren. Het is mogelijk van een nieuw formulier te vormen in een formulier. Dit formulier kan zelfs hetzelfde zijn als dat waar we in bezig zijn. Dat is logisch want vergeet niet dat het formulier infeite een klasse is, en dus is het mogelijk een nieuwe instantie van die klasse te nemen en mee te werken. Private Sub mnunieuwformulier_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles mnunieuwformulier.click Dim newform As New frmtekst newform.show() We kunnen nu ons programma even uittesten. Alles werkt zoals verwacht, echter er zijn nog een paar vervelende zaken die er in verschijnen o Per formulier wordt er een koppeling gemaakt naar de startbalk van windows o Bij afsluiten van document 1 worden automatisch alle documenten afgesloten. De reden hiervan is omdat alle formulieren gemaakt zijn vanuit 1 basis document, dus akls dat verdwijnt zullen ook alle andere verdwijnen. dit is niet iets dat we als goede programmeur mogen toelaten. We kunnen dit oplossen door te werken met MDI-bestanden MDI 2 documenten. Als men met MDI werkt zullen alle formulieren die tot 1 projrct behoren binnen het zelfde kader gehouden worden. Dit is de manier waarop de meeste software werkt. U 2 MDI = Multiple Document Interface 41

42 kunt bijvoorbeeld bij het programma word weel neven paginas opendoen in dezelfde sessie. Deze zullen dan ook binnen het zelfde venster manifesteren. Let wel per programma kan men maar één MDI form hebben. Vaak wordt dit het parent form genoemd, de andere form zijn dan child forms. Het is niet de bedoeling om, behalve menu s, besturingselementen op het MDI form te plaatsen. Het is dus een container (verzamelplaats) waarin de rets vna de formulieren gevangen gehouden worden. We gaan opnieuw het progrmma hierboven maken maar nu binnen in een MDI form. Maak een nieuw project aan. Hernoem form1 tot frmmdi. En de eigenschap tekst in Textverwerker. De eigenschap WindowsState zet je tot Maximized en de eigenschap IsMidiContainer tot True. Ogenblikkelijk zal de achtergrond kleur van het formulier grijs worden. Maak nu en mainmenu aan en plaast er de onderstaande gegevens in. Fig

43 MenuItem Bestand Nieuw Afsluiten Venster Onderelkaar Naastelkaar Trapsgewijs Schikken Naam mnubestand mnunieuw mnuafsluiten mnuvenster mnuonderelkaar mnunaastelkaar mnutrapsgewijs mnuschikken Maak een nieuww formulier aan met de naam frmtekst. Plaats op dit formulier een tekstvak met de naam txtinhoud. Zet bij dat tekstvak Multiline op true en de scrollbar op vertical en Achor op Top, Bottom, Left, Right. Hierdoor zal de grootte van het tekstvak steeds de grootte van het formulier volgen. We maken ook terug een module aan met één publike variabele Module Module1 Public docteller As Integer = 1 End Module Terug gaan we de klasse cls txtreadwrite aanmaken Public Class txtreadwrite Public Function LeesBestand(ByVal bestandsnaam As String) As String Dim SR As System.IO.StreamReader Dim retour As String If System.IO.File.Exists(bestandsNaam) Then SR = System.IO.File.OpenText(bestandsNaam) retour = SR.ReadToEnd() SR.Close() Else retour = "" End If SR = Nothing Return retour End Function Public Sub schrijfbestand(byval bestandsnaam As String, ByVal inhoud As String) Dim sw As System.IO.StreamWriter sw = System.IO.File.CreateText(bestandsnaam) 43

44 sw.write(inhoud) sw.flush() sw.close() sw = Nothing End Class We keren terug naar ons MDI bestand (frmmdi). Aan mnunieuw hagen we volgende code Public Class frmmdi Private Sub mnunieuw_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles mnunieuw.click Dim f As New frmtekst f.mdiparent = Me f.text = "document " & docteller.tostring f.windowstate = (FormWindowState.Maximized) docteller += 1 f.show() End Class Met deze code maakt u terug een objectvariabele en die verwijst nar het formulire welke we zopas aangemaakt hebben. Wij maken ook duidelijk dat het gemaakte formulier een child is van de parent frmmdi (in dit geval Me). In de titelbalk zorgen we terug dat het document een opeenvolgende nummering krijgt. Let wel we zorgen er ook voor dat het formulier gemaximaliseerd wordt. Het menu venster krijgt volgende code Private Sub OnderelkaarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OnderelkaarToolStripMenuItem.Click Me.LayoutMdi(MdiLayout.TileHorizontal) Private Sub NaastelkaarToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NaastelkaarToolStripMenuItem.Click Me.LayoutMdi(MdiLayout.TileVertical) Private Sub TrapgewijsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TrapgewijsToolStripMenuItem.Click Me.LayoutMdi(MdiLayout.Cascade) 44

45 Private Sub SchikkenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SchikkenToolStripMenuItem.Click Me.LayoutMdi(MdiLayout.ArrangeIcons) Omdat het menu venster voor alle mdi onderdelen gebruikt wordt hebben we speciale voorzieningen gemaakt voor dat menu. Dit laat toe de vensters te schikken in het parent venster.zoal u ziet hoef hje zelf neits te programmeren om de vensters te schikken in het hoofdvenster. Probeer maar eens je programma Mdi- en childmenu samenvoegen Het is de bedoeling, als je met Mdi forms werkt dat het hoofdmenu verschijnt op de parent form. En niet op de child forms Echter het menu dat we gemakt hebben is beperkt en voldoet niet aan de gevraagde noden. Echter heeft het ook geen zin om meer items in het menu te plaatsen. Als er geen gformulier te zien is hoeven de menus ook niet. Mischienb werken we wel met verschillende child formulieren zodat bij andere child formulieren de menu van geen belang zijn. Dan hebben we een speciale manuier om tewerk te gaan. We maken op het child formulier wel een menu systeem aan, met menu item voor de gegeven noden. Van zodra jez het child menu opend vanuit de MDI form worden de 2 menu s (1 van de parent en 1 van de child form) samengevoegd (gemerged). Een voorbeeld: Plaats in frmtekst een neiuw menusyetem (mnchild) en breng de onderstaande zaken er in. menuitem Bestand Naam Mnubestand - nvt Openen Opslaan Opslaan als Sluiten mnuopen mnuopslaan mnuopslaanals mnusluiten 45

46 - Nvt Afdrukvoorbeeld Afdrukken Bewerken Kopiëren Knippen Plakken Opmaak LetterType Tekstkleur PginaKleur mnuafdrukvoorbeeld mnuafdrukken mnubewerken mnukopiëren mnuknippen mnuplakken mnuopmaak mnulettertype mnutekstkleur M,uPaginaKleur 46

47 Wat Naam filter Mainmenu mnumenu OpenFileDialog cdlopenfile txtbestanden *.txt SaveFileDialog cdlsavefile txtbestanden *.txt FontDialog ColorDialog PrintDocument PrintDialog cdlfont cdlcolor PrintDoc cldprint PrintPreviwDialog cldprintpreview Document = PrintDoc Om beide samen te voegen gaan we in het item menu op de mdi form de porperty menulist Item zoek u de naam van de list dat je wilt mergen (samenvoegen). Let wel op de benamingen. Bij het openen van een nieuw document krijgen we dan onderstaande figuur in onze MdiForm. Zoals gezegd moet men wel letten op de benaming 47

48 Hoofdstuk 18 ADODB 18.1 Enkele bedenkingen In dit gedeelte gaan we de mogelijkheid onderzoeken voor het werken met databanken in samenwerking met VB.net. ADO 3 een samenstelling model objecten om databanken te bewerken. Het vormt een inleiding tot ActiveX Data Objects. ADO werd voor.net Framework volledig herschreven, en er zijn een aantal objecten gecreëerd die het werken met databanken gemakkelijker zou moeten maken. Microsoft heeft beloofd dat het wel vlotter zou moeten gaan, maar toch. Vroeger en ik denk nu nog werkt deze ADO enkel met losgekoppelde databanken. Voorbeelddatabank Maak bovenstaande databank en sla hem op bij uw documenten. We gebruiken de normale Access indeling. 3 Component Object Model (COM) objects for accessing data sources. (Wikipedia) 48

49 18.2 Wat is ADO ADO was in het begin bedoeld als een vervanging DAO, de oorspronkelijke manier waarop VB databanken benaderd. Hetzelfde als bij DAO zal met ADO de gegevens van de databanken benaderd worden op verschillende manieren. Hier volgend zullen we de verschillende stappen aangeven met bijhorende maatregelen wanneer we een ADO verbinding willen realiseren Verbindingswijzen ADO maakt het mogelijk om en database te benaderen uit het programma code. We moeten eerst een verbinding maken met de databank. Dit gebeurt door de OLE DBprovider. Deze OLE DB provider is het nieuwe low-level database interface van microsoft, die toegang verleent tot verschillende soorten gegevens. Er zijn OLE DB providers voor de traditionele databanken( SQL-Server), servers enz. De provider staat tot beschikking van ADO, die volgende verbindingen met de gegevens mogelijk maakt. Data-besturingselement. Een data-besturingselement is een aangepast besturingselement dat de communicatie met de databank verzorgt. Object Interface. Wanneer een verwijzing naar ADO opneemt, krijgt het programma beschikking tot nieuwe objecten Maken van een voorbeeld. We openen een nieuwe form en geven deze de naam klant. We gaan nu zorgen dat we een verbinding hebben met de database die we gemaakt hebben. Deze verbinding maken we in het menuitem Tools connect to database 49

50 Na dat we dat gedaan hebben komen we een pop-up menu tegen waarin we onze verbinding zuilen verwezenlijken. We zien bovenstaande figuur. We vullen in het gedeelte browse onze database in In dit geval staat het op mijn F schijf. Let wel het bekende mdb is veranderd in accdb. Deze extensie voor het gebruik van een Access database in ADO bij VB.net. Nu gaan we in onze form een object bij tekenen namelijk dat DataGridView. Bij het tekenen van dit object op onze form krijgen we bepaalde properties welke we dienen aan te vullen 50

51 Bij het aanduiden van onze datasource krijgen we volgende voorstelling Bij het aangeven van Add Project Data Source krijgen we de Data Choose Wizard waarin we Database aanduiden 51

52 Bij deze aanduiding krijgen we terug een ander menu. Bij dit menu moeten we aanduiden welke data base we willen connecteren. Daar nemen we onze database cliente.accdb Vervolgens vragen ze ons de dataconnectstring te benomen. We kunnen deze en naam geven die we willen. Daarna moeten we de elementen aanduiden die we willen voorstellen, in ons geval volledig de tabel. Nadat we dat gedaan hebben krijgen we volgende figuur onderstaande figuur. Letten we nu wel op de drie onderstaande objecten namelijk Dataset, Bindingsource en table adapter. Als we nu ons programma runnen zullen we (normaal) onderstaande figuur krijgen. Daarin zien we dat onze tabel die we gemaakt hadden volledig gepresenteerd wordt in ons programma. 52

53 Zoals we zien hebben we de benamingen die we gegeven hebben in onze tabel. We kunnen echter die veldnamen aanpassen door de kolom te editeren als we erin gaan staan met onze cursorwijzer en op de rechter muisknop drukken en zo volgende figuur bekomen waar we het kunnen editeren en veranderen. Probeer maar Zoals u ziet gebeurt dat in HeaderText. Daarin kunnen we dit veranderen. Dit is een methode die bestaat maar dat we niet gaan gebruiken. 53

54 Hoofdstuk 19 ADO.net (1) Hier zullen we de beginselen zien van het gebruik van ADO.net De databank toepassingen welke men maakt in vb.net, zijn cliënt/server toepassingen. In dit model is het e bedoeling om zoveel mogelijk het werk uithanden te nemen van de lokale pc en te laten verwerken op de server, en zodoende de pc enkel te belasten met de presentatie van de gegevens. In dit eerste deel gaan we echter gebruik maken van de lokale pc als server, en beperken we ons tot eenvoudige Access database op onze lokale pc. Later (in deel 2) gaan we gebruik maken van de views en stored procedures. We gebruiken een databank (computers.mdb), die op de server staat en dat je kunt downloaden. De relaties in de databank zijn zoals in de figuur opgesteld. 54

55 In de cursus gaan we er van uitgaan dat we de databank op volgende locatie bewaren: C:\computers.mdb We gaan eerst een nieuw project aanmaken. Daar we redelijk veel form s nodig zullen hebben vertrekken we met een MDI form. Maak een start form aan met de onderstaande indeling BasisTabellen mnubasistabellen Hardisks Memory Motherboards Processor mnuharddisks mnumemory mnumotherboards mnuprocessor - Memory Versie 2 Motherbords 2 mnumemoryversie2 mnumotherbords2 Venster mnuvenster Onder Elkaar Naast Elkaar Trapsgewijs mnuonderelkaar mnunaastelkaar MnuTrapsGewijs Afsluiten mnuafsluiten End mnuend 55

56 De menu s Venster en afsluiten kunnen we onmiddellijk programmeren Public Class start Private Sub mnuonderelkaar_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles mnuonderelkaar.click Me.LayoutMdi(MdiLayout.TileHorizontal) Private Sub mnunaastelkaar_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles mnunaastelkaar.click Me.LayoutMdi(MdiLayout.TileVertical) Private Sub mnutrapsgewijs_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles mnutrapsgewijs.click Me.LayoutMdi(MdiLayout.Cascade) Private Sub mnuend_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles mnuend.click End End Class 19.1 De architectuur van ADO.Net. De client toepassing vraagt aan der server om gegevens die naar de client computer worden verstuurd en lokaal wordt opgeslagen. Gegevens worden bij de server opgevraagd door middel van SQL-instructies en store procedures. Het resultaat van deze bevraging (mogelijks met een gedeelte die uit de databank komt)wordt terug van de server naar het pc gestuurd waar ze verder worden verwerkt. Op dat moment wordt de verbinding verbroken. De cliënt werkt op dat moment autono0m verder met deze deelgegevens, volledig losgekoppeld van de server. Deze verzameling noemt men DATASET. U kunt de gegevens dan bewerken in het data-object, eventueel nieuwe gegevens toevoegen of verwijderen. Dit gebeurt dan losgekoppeld van de eigenlijke databank. Op het ogenblik dat u beslist data het moment daar is om deze gegevens die je in het dataobject veranderd hebt te laten bijwerken op de server, moet u natuurlijk de verbinding opnieuw maken met deze server waar de gegevens dan gesynchroniseerd worden. Natuurlijk is het mogelijk dat terwijl de gegevens zich in de dataset bevinden, kunnen andere gebruikers nieuwe rijen aan de tabellen van de database toevoegen. Zelfs bestaande rijen kunnen bewerkt worden. 56

57 U kunt van tevoren helaas niet weten of een van de rijen in de lokale dataset al dan niet afwijkt van de oorspronkelijke rij in de databank. Het moment dat u de database wil synchroniseren komt u dat te weet. Als u directe toegang nodig hebt op de databank, ik denk hier aan reservatie opdrachten allerhande is het ADO systeem ongeschikt. Microsoft heeft aangegeven, dat dit in de nabije toekomst zou aangepast worden. In ons geval, echter, moeten we voor hij kan opgenomen worden bepaalde acties ondernemen. We moeten een verbinding maken met de databank. Dit gebeurt met het connection object hiermede wordt bepaald: - Soort van databank systeem je gebruikt(access, Oracle, server ). - waar deze zich bevindt - welke de parameters zijn, zoals gebruikersnaam, paswoord enz. Nadien heeft men data adapter nodig. Deze zal de communicatie verzorgen tussen de dataset en de databank. Het is ook deze die er voor zorgt dat de resultaten van een SQL instructie in de dataset terecht komt, en dat de gegevens uit de dataset terug gestuurd wordt, zodat die bijgewerkt wordt Het programmeren Voor dat we beginnen met het programmeren zullen we onze toolbox even moeten uitbreiden. Dit met bepaalde elementen. Zoals de OLEDBconnection. Deze zullen we gebruiken om de verbinding te verwezenlijken met de databank. Voeg een nieuwe form bij het project en noem die frmmemory. Verander de form text in geheugen versie 1. Zet zowel maximize-box als minimize-box op false. Selecteer in de toolbox data het deel OLEDBConnection, en sleep het op uw formulier. U zult zien dat het zal gepositioneerd worden onderaan uw form. Verander de naam in Connectie. Open daarna het eigenschapvenster op ConnectionString. Als tweede voegen we ook OLEDBDataAdapter toe op de zelfde wijze 57

58 Neem het gedeelte New Connection. Een wizard wordt gestart waarop we invullen dat we met een Access database werken. Direct daarop verschijnt een andere wizard waar we zien dat we onze databank kunnen invoeren. Tevens, en dit om dat we geen beveiliging op onze databank hebben, houden we als usernaam Admin en laten het paswoord vrij. Met de knop test connection kunnen we ons vergewissen indien we verbinding hebben met de databank. Vervolgens gaan we een data adapter invoegen. Deze zal terug onderaan terecht komen. Automatisch wordt er een wizard opgestart 58

59 Op het scherm staat de connectie die je al gemaakt hebt in de vorige OLEDBconnection. Klik dan op next Aangezien de data adapter de communicatie verzorgt tussen de databank en het programma. De dataadapter doet dit met behulp van SQL instructies. Let wel aangezien we hier werken met Access zijn de mogelijkheden van stored procedures hier niet van werking In het volgende scherm kan je deze SQL instructies inbrengen die de data adapter nodig heeft. Echter bij voorkeur gaan we de querybuilder gebruiken. Dus klik op query builder 59

60 In eerste instantie wordt er een lijst van de tabellen gegeven die van de besproken databank is. Daarin selecteren we Memory Zet bij alle velden een vinkje. Desgewenst kan men ook een volgorde instellen en klik op OK U kunt dan verder gaan tot dat je op het latset venster uitkomt en dan klik je op finish 60

61 Zorg dat de OLEDBDataAdapter geselecteerd staat, en verander zijn naam in adaptermemory. Klik in het menu op data en dan op Generate Dataset In het scherm dat dan verschijnt selecteert u new en voert als naam in EersteMemorySet en druk dan op OK Onderaan verschijnt er nu een dataset. Als u de eigenschappen van de dataset bekijkt zal er iets opvallen Enerzijds heb je als datasetname EersteMemorySet, maar je hebt ook als naam van de dataset EersteMemorySet1. Een dataset is een object de men creëert en dat over gans het project meeloopt. EersteMemorySet is het object en anderzijds is eerstememoryset1 een instantie van dit object. Zet nu een datagrid op je form en noem het DGRMemory. Om je dataset nu te koppelen aan deze grid heb je twee mogelijkheden. Men stelt de DataSource op EersteMemorySet1 en de datamember op Memory, of men stelt de eigenschap DataSource direct op EersteMemorySet1.Memory. Als men nu het programma start zal men zien dat men nog niets ziet. Hoewel de kolom koppen al vermeld staan is er niets van data. De reden daarvoor is omdat de data set nog niet gevuld is met data! Omdat te doen zal men in het LoadEvent van uw formulier de onderstaande code invullen. Deze code zal zorgen dat je dataset gevuld wordt. 61

62 Private Sub frmmemory_load(byval sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load EersteMemorySet1.clear() AdapterMemory.Fill(EersteMemorySet1). Het moment dat je nu het programma opstart zal je zien dat de datagrid gevult is. Voor het eventueel formateren van de grid kan men de kolommen aanpassen. Dit kan je doen als je het grid selecteerd en met rechter muisknop drukt. Op dat moment kan je met edit coloms de kolomen aanpassen. Probeer maar eens. We kunnen nu al veel doen maar we kunnen nog niet de wijzegingen in het datacomplex bewaren. Dit doen we met volgende code die we in ons form_closing Event van het formulier plaatsen. Private Sub frmmemory_formclosing(byval sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing AdapterMemory.Update(EersteMemorySet1) Met deze code worden de veranderingen weggeschreven naar uw databank opdracht Maak de volgende formullieren aan, analoog met de bovenstaande. Zorg dat je met deze formulieren Harddisk, Motherboard en Processor kunt beheren. 62

63 19.4 bewegen door de records Maak een nieuw formulier aan: frmmemry2 en plaats de controles zoals op voorbrrld. txtmem_grootte txtmen_snelheid btnfirst btnprevious btnnext btnlast lblposition Plaats een OLEdbadapter op uw formulier. En stel die op. Direct wordt er een dataconnectie gemaakt. Deze connectie zal natuurlijk spreken op computers.mdb. we noemen deze connection connectie en de adapter MemoryAdaptor. 63

64 Als je nu een dataset laat genereren neem dan EersteMemorSet1 als dataset (hij bestaat al). Bij de eigenschappen van de tekstvakken moeten we aan de databindingen volgende toevoegen. Voor de Grootte gaan we naar de respectievelijke grootte in de databank en voor de snelheid natuurlijk het zelfde. Om nu ons systeem te laten werken moeten we natuurlijk de nodige data in onze adapter vullen. Daarom vullen we volgende codes op de respectievelijke plaatsen in: Public Class frmmemory2 Dim positie As Long Dim RecAantal As Long Private Sub frmmemory2_load(byval sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load EersteMemorySet1.Clear() MemoryAdapter.Fill(EersteMemorySet1) RecAantal = Me.BindingContext(EersteMemorySet1, "Memory").Count - 1 If RecAantal = -1 Then btnprevious.enabled = False btnnext.enabled = False btnfirst.enabled = False btnlast.enabled = False Else positie = 0 Me.BindingContext(EersteMemorySet1, "Memory").Position = 0 lblposition.text = (positie + 1).ToString & "/" & (RecAantal + 1).ToString End If Private Sub btnfirst_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnfirst.click positie = Me.BindingContext(EersteMemorySet1, "Memory").Position positie = 0 Me.BindingContext(EersteMemorySet1, "Memory").Position = 0 lblposition.text = (positie + 1).ToString & "/" & (RecAantal + 1).ToString Private Sub btnlast_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnlast.click positie = Me.BindingContext(EersteMemorySet1, "Memory").Position positie = RecAantal Me.BindingContext(EersteMemorySet1, "Memory").Position = RecAantal lblposition.text = (positie + 1).ToString & "/" & (RecAantal + 1).ToString 64

65 Private Sub btnprevious_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnprevious.click positie = Me.BindingContext(EersteMemorySet1, "Memory").Position If positie > 0 Then positie -= 1 Me.BindingContext(EersteMemorySet1, "Memory").Position = positie End If lblposition.text = (positie + 1).ToString & "/" & (RecAantal + 1).ToString Private Sub btnnext_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnnext.click positie = Me.BindingContext(EersteMemorySet1, "Memory").Position If positie < RecAantal Then positie += 1 Me.BindingContext(EersteMemorySet1, "Memory").Position = positie End If lblposition.text = (positie + 1).ToString & "/" & (RecAantal + 1).ToString End Class Het enige wat ons nu nog rest is te zorgen dat dit foremulier de database bijwerkt. Dit gebeurt in het closing event. Private Sub frmmemory2_clossing(byval sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing MemoryAdapter.Update(EersteMemorySet1) 65

66 Hoofdstuk 20 Benaderen van de databanken vanuit de code (ADO2) In voorgaande uitleg hebben we steeds de databanken benaderd van uit een soort wizards. Deze zijn gemaakt om databanken te benaderen waar men zeker is dat deze nooit veranderen van plaats of van indeling. Zoals u weet ben ik niet altijd te vinden voor het gebruik van wizards. Deze zijn meestal van het principe monkey see, monkey do en dat legt een beperking op aan de vrijheid van de programmeur. Daarom gaan we vanaf nu proberen het werken met een databank zelf in handen te nemen verbindingen met de databank Het idee is het maken van onze verbindingen met behulp van de controles gaan vanaf nu niet meer doen maar we gaan deze verwezenlijken via de code. Deze code zal rechtstreeks in onze formulieren geprogrammeerd worden. Het zal de bedoeling zijn om in de volgende bespreking alles wat handelt over ADO netjes in een klasse te gieten (dit om te vermijden dat we steeds alles opnieuw moeten programmeren, want dat was immers de oorspronkelijke bedoeling van gebruik van een klasse). Maar om het idee eerst eens aan den lijve te ondervinden gaan we eerst eens alles zelf programmeren, zonder gebruik te maken van een klasse. Maak daarvoor onderstaand formulier: 66

67 De componenten zijn: Object Opschrift Naam Groepbox Data grpdata Listbox LST Knop Add btnadd Edit Del btnedit btndel Groepbox Details grpdetails Textveld Merknaam txtmerknaam, MaxLangth 20 Snelheid txtsnelheid, maxlength 10 Grootte Buffer txtgrootte, textallign right txtbuffer, textallign right Button Save btnsave, visible false Undo btnundo, visible false LST wordt gevuld met algemene informatie die de gebruiker instaat stelt een element uit de tabel te selecteren. Als de gebruiker een item geselecteerd heeft verschijnt de info i.v.m. het element in de groepbox Details. Klikt de gebruiker op Add of Edit dan wordt de rechterkant van het scherm ontoegankelijk. De linkerkant echter wordt toegankelijk zodat de gebruiker een nieuw item kan invoeren, of een bestaand item bewerken. Bij cancel wordt rechts weer toegankelijk en links niet toegankelijk. Er gebeurt verder NIETS Bij Save dan kunnen er twee mogelijkheden zich voordoen. Heeft de gebruiker een nieuw item ingevoerd wordt hij toegevoegd bij de bestaande tabel. Bij een wijziging wordt de wijziging opgenomen in de tabel. Opnieuw wordt links toegankelijk en rechts ontoegankelijk Bij Del zal het record verwijderd worden. 67

68 20.2 Publieke variabelen Een aantal variabelen moeten gekend zijn voor gans het formulier. Daarvoor zullen we deze opnemen als publieke variabelen. - In de connectiestring zullen we de gegevensplaatsen om een verbinding te maken. In ons geval met een Access databank maar dat kan ook voor een andere i.e. sql enz - SQL instructie zullen wij gebruiken om,met behulp van de sql taal, op te geven welke informatie in de databank moet opgehaald worden. - In dit formulier gaan we 2 data-sets en 2 data-adapters gebruiken. Eén om de informatie af te beelden in de listbox en één om de tabel bij te werken indien nodig. DS en DA gebruiken we om de tabel te beheren, DSListbox en DAListbox om de listbox te bevolken. - Tevens hebben we een CommandBuilder nodig om records toe te voegen, te wijzigen of te verwijderen uit de tabel. Om dat we maar 1 adapter hebben om in de tabel te werken (DA), zullen we ook maar 1 CommandBuilder gebruiken. De CommandBuilder zal zelf de SQL instructies schrijven om de gegevens toe te voegen, wijzigen of verwijderen. Het is belangrijk te weten dat u zelf er moet voor zorgen dat de SQL instructies waarmee u de adapters bevolkt die u gebruikt om de tabel zelf te beheren, steeds de primaire sleutel van de tabel zelf moet bevatten. Voor alle andere adapters is dit niet nodig Volgende code wordt aan uw form toegevoegd: Dim Toevoegen As Boolean Dim ConnectieString As String Dim SqlInstructie As String Dim DS As New DataSet Dim DSListbox As New DataSet Dim DA As New OleDb.OleDbDataAdapter Dim DAListBox As New OleDb.OleDbDataAdapter Dim CmdBuilder As New OleDb.OleDbCommandBuilder 20.2 Het Load-Event. In het load-event van het formulier gaan we de respectievelijke adapters en datasets initialiseren en de listbox vullen. Omdat het vullen van de datasets en adapters op andere plaatsen ook zal moeten gebeuren maken we hier afzonderlijke methoden van! 68

69 Bekijk de onderstaande code: Private Sub frmharddisk2_load(byval sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Call VulData() Call VulLst() Private Sub VulData() ConnectieString = "Provider= Microsoft.Jet.Oledb.4.0;Data Source= f:\computers.mdb;" SqlInstructie = "select hd_id, merknaam, snelheid, grootte, buffer from harddisk order by merknaam, snelheid, grootte" DA = New OleDb.OleDbDataAdapter(SqlInstructie, ConnectieString) DS.Clear() DA.Fill(DS) CmdBuilder = New OleDb.OleDbCommandBuilder(DA) SqlInstructie = "select merknaam + ' '+snelheid+'('+ format(grootte, '000')& ' GB)' as veld from harddisk order by merknaam, snelheid, grootte" DAListBox = New OleDb.OleDbDataAdapter(SqlInstructie, ConnectieString) DSListbox.Clear() DAListBox.Fill(DSListbox) Lst.Refresh() Private Sub VulLst() Dim T As Integer Lst.Items.Clear() For T = 0 To DSListbox.Tables(0).Rows.Count - 1 Lst.Items.Add(DSListbox.Tables(0).Rows(T).Item(0)) Next 20.3 Bij het klikken in de listbox Als een gebruiker een item in de listbox selecteert, dan dienen de corresponderende detailgegevens te verschijnen in het rechter gedeelte van het scherm. U kunt een record selecteren met de uitdrukking: Dataset.Tables(<nummer>).Rows(<nummer>).Item(<nummer>) - Tables(<nummer>) bepaalt welke tabel uit de dataset moet gebruikt worden(die is voorlopig steeds de eerste tabel). - Rows(<nummer>) bepaalt hoeveelste record er moet geselecteerd worden binnen de tabel. We hebben er voor gezorgd dat de volgorde waarin de items worden afgebeeld in de ListBox overeenkomen met de volgorde waarin de records zich in de dataset bevinden (gebruik van de order by clausule). 69

70 Als we dus het 3 de element uit de listbox selecteren zullen we spreken over het 3 de element in de dataset - Item(<nummer>) gaat over het veld binnen het geselecteerde record. Als we schrijven Item(1), dan spreken we over het 2 de veld (hier Merknaam). Men mag ook schrijven Item( merknaam ) btnadd 20.5 btnedit Bekijk onderstaande code Private Sub Lst_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Lst.SelectedIndexChanged txtmerknaam.text = DS.Tables(0).Rows(Lst.SelectedIndex).Item(1) txtsnelheid.text = DS.Tables(0).Rows(Lst.SelectedIndex).Item(2) txtgrootte.text = DS.Tables(0).Rows(Lst.SelectedIndex).Item(3) txtbuffer.text = DS.Tables(0).Rows(Lst.SelectedIndex).Item(4) Het principe is gekent uit vorige opmerking. Links wordt ontooegankelijk gemaakt, rechts toegankelijk. Gezien dat we spreken over een neiuw record worden alle valden ledig gemaakt. De publieke variabele Toevoegen wordt op TRUE gezet zodat we straks bij het bewaren nog weten dat het om een toevoeging of wijziging gaat. Private Sub btnadd_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnadd.click Toevoegen = True grpdata.enabled = False grpdetails.enabled = True btnsave.visible = True btncancel.visible = True txtmerknaam.clear() txtsnelheid.clear() txtgrootte.clear() txtbuffer.clear() txtmerknaam.focus() Hetzelfde als hierboven maar nu worden de tekstvakken NIET leeggemaakt en wordt de variabele Toevoegen op False gezet Private Sub btnedit_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnedit.click If Lst.SelectedIndex = -1 Then Exit Sub Toevoegen = False grpdata.enabled = False 70

71 grpdetails.enabled = True btnsave.visible = True btncancel.visible = True txtmerknaam.focus() 20.6 btncancel Hier dient net het omgekeerde gebeuren als bij btnadd en btnedit Private Sub btncancel_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btncancel.click grpdata.enabled = True grpdetails.enabled = False btnsave.visible = False btncancel.visible = False Lst.Focus() Call Lst_SelectedIndexChanged(sender, e) 20.7 btnsave Om een record toe te voegen vanuit de code aan uw tabele heeft u een DataRowCollection en een DataRow nodig. De eerste keer dat je die code ziet zal ze wel ietwat vreemd overkomen, maar ze is logisch te begrijpen. Het wijzigen gebeurt rechtstreeks op de item-eigenschappen van de tabel. Om het programma niet te veel te verzwaren zullen we ons niets aantrekken van de controle op het inhoudelijke. Het is wel zo dat dit normaal moet gebeuren, om zeker te zijn dat het programma fools proof is. Om de wijzigingen/toevoegingen door te voeren naar de tabel moeten we nu de ComandBuilder zijn werk laten doen. U zult opmerken dat we niet expliciet een Insert of Update instructie te schrijven. De CommandBuilder zal dit voor u op de achtergrond doen. Er wordt nogmaals op benadrukt dat de primaire sleutel moet aanwezig zijn in de adapter! Omdat een data-adapter en een dataset statische gegevens zijn(dus losgekoppeld van de eigenlijke databank) moeten we deze nu laten updaten, afsluiten en terug openen. Dat is de reden waarom we de methode vuldata teug aanroepen. Private Sub btnsave_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btnsave.click Dim RowColl As DataRowCollection Dim NieuweRij As DataRow Dim Waarden(4) As Object Dim Selector As String 71

72 _ If Toevoegen = True Then RowColl = DS.Tables(0).Rows ' waarden(0) niet invullen want deze zijn autonummering Waarden(1) = txtmerknaam.text Waarden(2) = txtsnelheid.text Waarden(3) = Integer.Parse(txtGrootte.Text) Waarden(4) = Integer.Parse(txtBuffer.Text) NieuweRij = RowColl.Add(Waarden) Else DS.Tables(0).Rows(Lst.SelectedIndex).Item(1) = txtmerknaam.text DS.Tables(0).Rows(Lst.SelectedIndex).Item(2) = txtsnelheid.text DS.Tables(0).Rows(Lst.SelectedIndex).Item(3) = Integer.Parse(txtGrootte.Text) DS.Tables(0).Rows(Lst.SelectedIndex).Item(4) = Integer.Parse(txtBuffer.Text) End If Selector = txtmerknaam.text + " " + txtsnelheid.text + " " + " (" + Format(txtGrootte.Text, "000") & "GB)" 'de selector wordt gebruikt om het huidige record te selecteren in de listbox DA.UpdateCommand = CmdBuilder.GetUpdateCommand DA.Update(DS.Tables(0)) grpdata.enabled = True grpdetails.enabled = False btnsave.visible = False btncancel.visible = False Lst.Focus() Lst.SelectedItem = Selector 20.8 btndelete Met Rows(<nummer>.delete method verwijdert u een rij uit de dataset. Denk er aan dat opnieuw de CommandBuilder zijn werk moet doen en daardoor u de dataset en data-adapter opnieuw moet sluiten en terug openen om een juist beeld te krijgen van de onderliggende tabel. Private Sub btndelete_click(byval sender As System.Object, ByVal e As System.EventArgs) Handles btndelete.click If Lst.SelectedIndex = -1 Then Exit Sub If MessageBox.Show("Mag dit onderdeel verwijderd worden?", "wissen", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = DialogResult.Yes Then DS.Tables(0).Rows(Lst.SelectedIndex).Delete() DA.UpdateCommand = CmdBuilder.GetUpdateCommand DA.Update(DS.Tables(0)) Call VulData() Call VulLst() End If 72

73 20.9 oefening Maak nu zelf een formulier voor de moederborden (frmmotherboards2). Gebruik daarvoor onderstaande form 73

Dieper in Visual Basic.Net

Dieper in Visual Basic.Net Visual Basic.NET Dieper in Visual Basic.Net 7.1 Inleiding Dit hoofdstuk is bedoeld om je wat handiger te maken in het programmeren in Visual Basic. Je leert geen nieuwe programmeervaardigheden, maar je

Nadere informatie

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET Visual Basic.NET M. den Besten 0.3 VB. NET Inhoud Voorwoord Deel 1 Visual Basic.NET 1.1 Inleiding...13 1.2 De programmeertaal Visual Basic.NET...14 1.3 Microsoft Visual Basic 2010 Express Edition...15

Nadere informatie

1 Werken met (keuze)lijstjes: de control listbox

1 Werken met (keuze)lijstjes: de control listbox 1 Werken met (keuze)lijstjes: de control listbox 1.1 Keuzelijstjes: wat en waarom In een educatief programma wordt vaak gebruik gemaakt van keuzelijstjes. Enkele voorbeelden: * bij het opstarten van een

Nadere informatie

VAN HET PROGRAMMEREN. Inleiding

VAN HET PROGRAMMEREN. Inleiding OVERZICHT VAN HET PROGRAMMEREN Inleiding Als je leert programmeren lijkt het nogal overweldigend om die eerste stappen te doorworstelen. Er zijn dan ook heel wat programmeertalen (Java, Ruby, Python, Perl,

Nadere informatie

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double. Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort

Nadere informatie

Som Van Twee Getallen

Som Van Twee Getallen Public Class frmsomvantweegetallen Som Van Twee Getallen Private Sub btnberekensom_click(sender As System.Object, e As System.EventArgs) Handles btnberekensom.click 'Declareer de variabelen '-----------------------

Nadere informatie

Analyse KeyLock versie 1.1.1 Door MartinJM 08-12-2014

Analyse KeyLock versie 1.1.1 Door MartinJM 08-12-2014 Analyse KeyLock versie 1.1.1 Door MartinJM 08-12-2014 Openbare versie Inleiding Dit document bestaat uit meerdere delen. Voornamelijk de verschillende problemen zijn onderverdeeld in verschillende kopjes.

Nadere informatie

Hoofdstuk 7: Werken met arrays

Hoofdstuk 7: Werken met arrays Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, januari 2004 Hoofdstuk 7: Werken met arrays 7.0 Leerdoel

Nadere informatie

VB Magazine Online 2004 01/08 1 / 6

VB Magazine Online 2004 01/08 1 / 6 Een van de krachtigste elementen binnen Visual Basic 2003 vind ik wel de mogelijkheid om objecten te overerven; ook wel inheritance genoemd. U kunt niet alleen uw eigen classes en business objecten overerven,

Nadere informatie

6.3 VBA Syntax Instructie. Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken.

6.3 VBA Syntax Instructie. Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken. 6.3 VBA Syntax Wij gaan de Visual Basic Editor opnieuw openen, om de instructie die wij zojuist getypt hebben, nader te bekijken. Klik te tab Hulpmiddelen voor databases Klik in het groepsvak Macro op

Nadere informatie

Hoofdstuk 1: Een eerste Visual Basic project

Hoofdstuk 1: Een eerste Visual Basic project Programmeren in Microsoft Visual Basic 2010 Express, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Vespucci College, Marnix Gymnasium Rotterdam, december 2011 Hoofdstuk

Nadere informatie

Hoofdstuk 2: Werken met variabelen

Hoofdstuk 2: Werken met variabelen Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, februari 2001 Hoofdstuk 2: Werken met variabelen 2.0

Nadere informatie

Een eerste applicatie

Een eerste applicatie Een eerste applicatie 2.1 Inleiding Programmeren in Visual Basic.NET doe je niet alleen door regels met code te schrijven. Je begint met het ontwerpen van een venster in de design mode met allerlei controls,

Nadere informatie

Zorgmail handleiding. Inhoud

Zorgmail handleiding. Inhoud Inhoud 1. Beginnen met Zorgmail pag. 2 2. Het instellen van Zorgmail pag. 2 3. Het gebruik van Zorgmail m.b.t. Artsen pag. 3 4. Het aanpassen van de lay-out van Zorgmail pag. 4 5. Werken met Zorgmail pag.

Nadere informatie

Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers

Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers 1 Inhoud Klassen & objecten, overerving, abstracte klassen, debuggen, interfaces, formulieren, polymorfie, statische methoden, event-handlers 2 Geluidsbronnen simulator, deel 2 Inleiding De weergave versnellen

Nadere informatie

Cursus Onderwijs en ICT. Programmeren met Visual Basic

Cursus Onderwijs en ICT. Programmeren met Visual Basic Cursus Onderwijs en ICT Jaargang 2, deel 23 (versie 1.0 NL 2-7-2011) Programmeren met Visual Basic door Serge de Beer Inleiding In sommige gevallen biedt het aanbod op de softwaremarkt niet wat je zoekt.

Nadere informatie

Hoofdstuk 1: Een eerste Visual Basic project

Hoofdstuk 1: Een eerste Visual Basic project Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, februari 2001 Hoofdstuk 1: Een eerste Visual Basic

Nadere informatie

Variabelen en statements in ActionScript

Variabelen en statements in ActionScript Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer

Nadere informatie

Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel:

Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel: Eenvoudig voorbeeld. Er wordt verondersteld dat er met VS 2008 EXPRESS gewerkt wordt. Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel: (Sommige schermafdrukken zijn afkomstig

Nadere informatie

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

Stel dat u 15 tellers nodig heeft. Dat kunt u een array van tellers als volgt declareren: V. Arrays A. Wat zijn arrays? Een array is een verzameling van variabelen. Ze hebben allen dezelfde naam en hetzelfde type. Men kan ze van elkaar onderscheiden door een volgnummer, index genoemd. Enkele

Nadere informatie

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) Vereiste voorkennis Voldoende kennis van het besturingssysteem (in deze handleiding wordt uitgegaan van Windows) De basisprincipes van programmeren Vereiste

Nadere informatie

Programmeren in Excel VBA. Karel Nijs 2010/09

Programmeren in Excel VBA. Karel Nijs 2010/09 Programmeren in Excel VBA Karel Nijs 2010/09 Leswijze Eerst wat theorie Begeleid met (korte) oefeningen MsExcel 2003 Online hulp: http://www.ozgrid.com/vba/ http://msdn.microsoft.com/en-us/library/sh9ywfdk(vs.80).aspx

Nadere informatie

II. ZELFGEDEFINIEERDE FUNCTIES

II. ZELFGEDEFINIEERDE FUNCTIES II. ZELFGEDEFINIEERDE FUNCTIES In Excel bestaat reeds een uitgebreide reeks van functies zoals SOM, GEMIDDELDE, AFRONDEN, NU enz. Het is de bedoeling om functies aan deze lijst toe te voegen door in Visual

Nadere informatie

GCE cad-app. GCE cad-service 4/16/2012

GCE cad-app. GCE cad-service 4/16/2012 2012 GCE cad-app Student: Begeleider: School: S. van Bueren R. Boeklagen TEC CadCollege Afstudeer datum: 27-04-2012 GCE cad-service 4/16/2012 0 Voorwoord Voor u ligt een verslag van de opleiding AutoCAD

Nadere informatie

In de tweede regel plaatsen we in het gereserveerde stukje geheugen een getal.

In de tweede regel plaatsen we in het gereserveerde stukje geheugen een getal. 4. Array s Een array is een geïndexeerde variabele. Deze zin zal de nodig vragen oproepen, waarop enige uitleg van toepassing is. Met variabelen hebben we al kennis gemaakt. In een variabele kun je iets

Nadere informatie

Beschrijvings SW gebruikers handleiding (V1.1) Voor Apple Macintosh computers Voor Macintosh Computer

Beschrijvings SW gebruikers handleiding (V1.1) Voor Apple Macintosh computers Voor Macintosh Computer Annotation SW User s Guide Beschrijvings SW gebruikers handleiding (V1.1) Voor Apple Macintosh computers Voor Macintosh Computer 2011. 5 PenAndFree Co.,Ltd 0 Deze handleiding beschrijft alle functies die

Nadere informatie

Bijlage Inlezen nieuwe tarieven per verzekeraar

Bijlage Inlezen nieuwe tarieven per verzekeraar ! Bijlage inlezen nieuwe tarieven (vanaf 3.2) Bijlage Inlezen nieuwe tarieven per verzekeraar Scipio 3.303 biedt ondersteuning om gebruikers alle tarieven van de verschillende verzekeraars in één keer

Nadere informatie

HBO Traject ACE. Generiek testplan voor AutoCAD. Auteur Ing. M. van Walraven. Datum 11 februari 2014. Docent Ir. Ronald Boeklagen

HBO Traject ACE. Generiek testplan voor AutoCAD. Auteur Ing. M. van Walraven. Datum 11 februari 2014. Docent Ir. Ronald Boeklagen HBO Traject ACE Generiek testplan voor AutoCAD Auteur Ing. M. van Walraven Datum 11 februari 2014 Docent Ir. Ronald Boeklagen Studie HBO traject ACE System Manager Voorwoord In mei 2001 ben ik in vaste

Nadere informatie

Hoofdstuk 4: Nieuwe objecten

Hoofdstuk 4: Nieuwe objecten Programmeren in Microsoft Visual Basic 2010 Express, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Vespucci College, Marnix Gymnasium Rotterdam, december 2011 Hoofdstuk

Nadere informatie

Elektronisch factureren

Elektronisch factureren Elektronisch factureren Inleiding Elektronisch Factureren in RADAR is mogelijk vanaf versie 4.0. Deze module wordt niet standaard meegeleverd met de RADAR Update maar is te bestellen via de afdeling verkoop

Nadere informatie

Maak een pivot uit een Generic.List

Maak een pivot uit een Generic.List Maak een pivot uit een Generic.List Introductie in extensions, reflection en code generation Nivo: 400 Introductie In bepaalde gevallen komt het voor dat je een Generic.List van een specifieke class hebt,

Nadere informatie

Het installatiepakket haal je af van de website http://www.gedesasoft.be/.

Het installatiepakket haal je af van de website http://www.gedesasoft.be/. Softmaths 1 Softmaths Het installatiepakket haal je af van de website http://www.gedesasoft.be/. De code kan je bekomen op de school. Goniometrie en driehoeken Oplossen van driehoeken - Start van het programma:

Nadere informatie

Mappen en bestanden. In dit hoofdstuk leert u het volgende:

Mappen en bestanden. In dit hoofdstuk leert u het volgende: Mappen en bestanden 1 Mappen en bestanden Een bestand is een verzamelnaam voor teksten, tekeningen of programma s. Alles wat op de vaste schijf van uw computer staat, is een bestand. Op een vaste schijf

Nadere informatie

Tutorial 1, Delphi: Geldspraak

Tutorial 1, Delphi: Geldspraak Tutorial 1, Delphi: Geldspraak Versie Datum Auteurs Opmerkingen 1 25-09-2001 Kees Hemerik (code) Gebaseerd op Delphi 5 Enterprise. Roel Vliegen (tekst) 2 17-03-2005 Kees Hemerik Aanpassingen: Delphi 7,

Nadere informatie

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie Leren Programmeren met Visual Basic 6.0 Les 3+4 Hoofdstuk 4 : De Selectie Visual Basic 6.0 1 Basisstructuren (herhaling) Sequentie (HK2) : Alle opdrachten gewoon na mekaar uitvoeren. Hier worden geen keuzes

Nadere informatie

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B;

public Bier ( string N, double P, Brouwerij B) { Naam = N; AlcoholPerc = P; Brouwer = B; Beschouw bijvoorbeeld de twee onderstaande klassen, waarvan de attributen en eigenschappen geannoteerd zijn met bijkomende XML-annotaties: using System ; using System. Xml ; using System. Xml. S e r i

Nadere informatie

Technische handleiding database ontslagmanagement

Technische handleiding database ontslagmanagement Technische handleiding database ontslagmanagement 1. Het databasevenster De database opent u door te dubbelklikken 1 op het Access-icoon Ontslagmanagement.lnk Mogelijk krijgt u eerst één of meerdere vensters

Nadere informatie

Een gelinkte lijst in C#

Een gelinkte lijst in C# Een gelinkte lijst in C# In deze tutorial ga demonstreren hoe je een gelinkte lijst kan opstellen in C#. We gaan een klasse schrijven, die een gelijkaardige functionaliteit heeft als een ArrayList, namelijk

Nadere informatie

Handleiding CMS VOORKANT

Handleiding CMS VOORKANT Handleiding CMS VOORKANT Inhoudsopgave Pagina 1. Toegang tot het CMS... 3 2. Artikel toevoegen... 4 3. Artikel bewerken... 5 4. Artikel kopiëren of verwijderen... 6 5. Afbeelding, link of tabel invoegen...

Nadere informatie

PlanCare Dossier V11.4 Carrouselkaarten. Inhoudsopgave

PlanCare Dossier V11.4 Carrouselkaarten. Inhoudsopgave Inhoudsopgave Inleiding... 2 maken... 2 Matrixkaart... 3 Open vragen kaart... 5 wijzigen... 6 verwijderen... 7 gebruiken... 7 Handelingen met huidige selectie... 8 PlanCare Dossier V11.4 - Pagina 1 van

Nadere informatie

Gebruikershandleiding

Gebruikershandleiding Gebruikershandleiding Training MANUAL DE USUARIO NAC SPORT ELITE Version 1.3.400 Nacsport Training wwww.nacsport.com 1 Index 1- AFBEELDINGEN 2- OEFENINGEN 3- TRAINING 4- KALENDER Nacsport Training wwww.nacsport.com

Nadere informatie

Declareren. Stap 1 Openstaande behandelingen

Declareren. Stap 1 Openstaande behandelingen Declareren Stap 1 Openstaande behandelingen Bij het programma onderdeel Declaratie, Openstaande behandelingen (zorgverzekeraars) kunt u kijken welke welke behandelingen er nog niet gedeclareerd zijn. Druk

Nadere informatie

Op basis van klanten-,product-,barcodegegevens wordt automatisch een barcode document aangemaakt

Op basis van klanten-,product-,barcodegegevens wordt automatisch een barcode document aangemaakt Op basis van klanten-,product-,barcodegegevens wordt automatisch een barcode document aangemaakt Pagina 1 van 56 Inhoud van deze help 1. Algemeen 1.1 Inhoud van deze box. 1.2 Minimum systeemvereisten 2.

Nadere informatie

Handleiding CMS Online Identity Webontwikkeling. Handleiding CMS

Handleiding CMS Online Identity Webontwikkeling. Handleiding CMS Handleiding CMS 1 Inhoudsopgave 1. Inloggen... 3 2. Het CMS... 3 3. Websitecontent... 4 3.1 Een nieuwe pagina toevoegen... 4 3.2 Een pagina wijzigen... 4 3.3 Een pagina verwijderen... 5 4. De WYSIWYG editor...

Nadere informatie

Badge it. Inhoudsopgave. 1. Installatie... 3

Badge it. Inhoudsopgave. 1. Installatie... 3 Badge it voor Windows 95/98/NT/2000/XP Inhoudsopgave 1. Installatie... 3 2. Start... 4 2.1. Nieuwe database maken... 5 2.2. De geselecteerde database openen... 5 2.3. De naam van de geselecteerde database

Nadere informatie

HANDLEIDING DMS. Handleiding DMS. Dit document is de handleiding voor het DMS (Document Management Systeem) op drie verschillende niveau s:

HANDLEIDING DMS. Handleiding DMS. Dit document is de handleiding voor het DMS (Document Management Systeem) op drie verschillende niveau s: HANDLEIDING DMS Dit document is de handleiding voor het DMS (Document Management Systeem) op drie verschillende niveau s: Gebruiker Coördinator Administrator end2end solutions pagina 1 Op het DMS van Ieper

Nadere informatie

User accounts maken in een Wandy Hotspot, d.m.v. een batch.

User accounts maken in een Wandy Hotspot, d.m.v. een batch. User accounts maken in een Wandy Hotspot, d.m.v. een batch. Bij het in gebruik nemen van een Wandy Hotspot is het aanmaken van gebruikers een tijdrovende klus. Om snel veel accounts aan te maken hebben

Nadere informatie

Vakgroep CW KAHO Sint-Lieven

Vakgroep CW KAHO Sint-Lieven Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be

Nadere informatie

Windows Verkenner. 1. Enkele basiselementen. 1. Bestanden

Windows Verkenner. 1. Enkele basiselementen. 1. Bestanden 16 Windows Verkenner Wanneer we een bestand willen bewaren, is het van belang goed te weten waar we het gaan opslaan. Hiervoor is het nuttig om eerst de structuur van onze computer te bekijken. Dit kunnen

Nadere informatie

Automatisering voor Financiële Dienstverleners. Werken met Queries en Merge Documenten. For more information visit our website at www.pyrrho.

Automatisering voor Financiële Dienstverleners. Werken met Queries en Merge Documenten. For more information visit our website at www.pyrrho. Automatisering voor Financiële Dienstverleners Werken met Queries en Merge Documenten For more information visit our website at www.pyrrho.com Date: Document Nr: 30 maart, 2007 UBizzMerge, Versie 4.0 Status:

Nadere informatie

Technische Fiche om een commando met een passend icoontje aan te maken in de Ribbon Interface.

Technische Fiche om een commando met een passend icoontje aan te maken in de Ribbon Interface. Technische Fiche om een commando met een passend icoontje aan te maken in de Ribbon Interface. Dit document is gebaseerd op Inventor 2011 & Windows XP. PS: Het kan zijn dat bepaalde zaken verschillen of

Nadere informatie

Handleiding voor bloemenboek (open boek)- PP 2007

Handleiding voor bloemenboek (open boek)- PP 2007 Handleiding voor bloemenboek (open boek)- PP 2007 1. Raster en hulplijnen Klik met rechter muisknop in een lege dia Klik in het afrolmenu op Raster en hulplijnen en stel onderstaande eigenschappen in 2.

Nadere informatie

Symbol for Windows BlissEditor

Symbol for Windows BlissEditor Handicom Symbol for Windows BlissEditor ( Versie 4 ) Handicom, 2006, Nederland Inhoud 1. Inleiding... 2 2. Schermopbouw van de Bliss Editor...3 2.1 Werkbalk... 3 2.2 Matrix... 4 2.3 Palet met basisvormen,

Nadere informatie

Het Wepsysteem. Het Wepsysteem wordt op maat gebouwd, gekoppeld aan de gewenste functionaliteiten en lay-out van de site. Versie september 2010

Het Wepsysteem. Het Wepsysteem wordt op maat gebouwd, gekoppeld aan de gewenste functionaliteiten en lay-out van de site. Versie september 2010 Het Wepsysteem Het Wepsysteem is een content management systeem, een systeem om zonder veel kennis van html of andere internettalen een website te onderhouden en uit te breiden. Met het Content Management

Nadere informatie

DELPHI VOOR ELEKTRONICI. Deel 2: Een rekenmachine programmeren CURSUS

DELPHI VOOR ELEKTRONICI. Deel 2: Een rekenmachine programmeren CURSUS DELPHI VOOR ELEKTRONICI CURSUS Deel 2: Een rekenmachine programmeren Herman Bulle met dank aan Anton Vogelaar In het vorige artikel hebben we de programmeeromgeving van Delphi geïntroduceerd en zijn er

Nadere informatie

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS) LES 4 In deze les gaan we een eenvoudig dobbelspelletje maken: Allereerst krijgt de speler de gelegenheid zijn/haar naam in te vullen en daarna op OK te klikken

Nadere informatie

INSTALLATIE IN PRINT INSTALLEREN. Aan de slag met Communicate In Print

INSTALLATIE IN PRINT INSTALLEREN. Aan de slag met Communicate In Print AAN DE SLAG INSTALLATIE In deze handleiding worden de stappen besproken die doorlopen worden bij het installeren van de volledige versie Communicate In Print LET OP! WANNEER U EERDER EEN VERSIE VAN IN

Nadere informatie

Het relaas van de beginnende programmeur. Het hoe en waarom van de assistent

Het relaas van de beginnende programmeur. Het hoe en waarom van de assistent Het relaas van de beginnende programmeur Het hoe en waarom van de assistent 1. Help, mijn code doet niks... Mogelijke oplossingen: Heb je op run geduwd (groene pijltje)? Zolang je niet op 'run' duwt, kent

Nadere informatie

Studio Visual Steps Een formulier maken

Studio Visual Steps Een formulier maken Studio Visual Steps Een formulier maken Aanvullend PDF-bestand bij het boek Websites bouwen met Web Easy Een formulier maken 2 Een formulier maken Een bijzonder onderdeel van een website is het formulier.

Nadere informatie

Handleiding theocms2 K.U.Leuven - Faculteit Godgeleerdheid Stijn Van Baekel 1/19. - HANDLEIDING CMS2 - http://theo.kuleuven.be/

Handleiding theocms2 K.U.Leuven - Faculteit Godgeleerdheid Stijn Van Baekel 1/19. - HANDLEIDING CMS2 - http://theo.kuleuven.be/ Stijn Van Baekel 1/19 - HANDLEIDING CMS2 - http://theo.kuleuven.be/ laatste aanpassing: 08/10/2008 Stijn Van Baekel 2/19 Index Index... 2 Inleiding... 3 1. Tonen van pagina s... 4 2. Beheer van pagina

Nadere informatie

HTA Software - Klachten Registratie Manager Gebruikershandleiding

HTA Software - Klachten Registratie Manager Gebruikershandleiding HTA Software - Klachten Registratie Manager Gebruikershandleiding Inhoudsopgave Hoofdstuk 1: Opstarten en inloggen, overzicht startscherm, uitleg symbolen Hoofdstuk 2: aanmaken relaties Hoofdstuk 1: Opstarten

Nadere informatie

Handleiding Wlijn Databeheer Internet

Handleiding Wlijn Databeheer Internet Handleiding Wlijn Databeheer Internet W9000 databeheer internet Leza Horeca & Winkel Management Van Dedemstraat 6 16274 NN Hoorn DATABEHEER INTERNET ( W9000) Voorraad Databeheer Internet Bestaat uit 3

Nadere informatie

Datum, Tijd en Timer-object

Datum, Tijd en Timer-object IX. Datum, Tijd en Timer-object A. Hoe worden tijd en datum in VB aangeduid? Zowel datum als tijd worden als een getal met decimalen opgeslagen. Het gedeelte voor de komma geeft de datum aan, het gedeelte

Nadere informatie

Asta Powerdraw voor de afdrukkaders gebruiken

Asta Powerdraw voor de afdrukkaders gebruiken Asta Powerdraw voor de afdrukkaders gebruiken Powerdraw is een Asta hulpprogramma dat bedoeld is voor het bewerken van kaderbestanden. Kaderbestanden zijn bestanden waarin bepaald wordt wat er op en rondom

Nadere informatie

Elbo Technology BV Versie 1.1 Juni 2012. Gebruikershandleiding PassanSoft

Elbo Technology BV Versie 1.1 Juni 2012. Gebruikershandleiding PassanSoft Versie 1.1 Juni 2012 Gebruikershandleiding PassanSoft Versie 1.1 Juni 2012 2 Inhoud: Opstart scherm PassanSoft... 1 Het hoofdmenu van PassanSoft wordt geopend... 4 Verklaring extra knoppen weergegeven

Nadere informatie

DMX LIGHTPLAYER. Inleiding...2. DMX bibliotheek...3. Kanalen programmeren...7. Sequentie creëren...11

DMX LIGHTPLAYER. Inleiding...2. DMX bibliotheek...3. Kanalen programmeren...7. Sequentie creëren...11 DMX LIGHTPLAYER Inleiding...2 DMX bibliotheek...3 Kanalen programmeren...7 Sequentie creëren...11 Inleiding De DMX LightPlayer is zeer gebruikersvriendelijk. Importeer een bestaand toestel of creëer een

Nadere informatie

Factuur Beheer. Gebruikers handleiding

Factuur Beheer. Gebruikers handleiding Factuur Beheer Gebruikers handleiding COPYRIGHT 2002 Factuur Beheer Pakket 1 Factuur Beheer door ing. K.H. Welling Factuur Beheer is een boekhoudkundig programma. In dit programma kunnen facturen voor

Nadere informatie

Snel aan de slag met BasisOnline en InstapInternet

Snel aan de slag met BasisOnline en InstapInternet Snel aan de slag met BasisOnline en InstapInternet Inloggen Surf naar www.instapinternet.nl of www.basisonline.nl. Vervolgens klikt u op de button Login links bovenin en vervolgens op Member Login. (Figuur

Nadere informatie

Labo 2 Programmeren II

Labo 2 Programmeren II Labo 2 Programmeren II L. Schoofs K. van Assche Gebruik Visual Studio 2005 om een programma te ontwikkelen dat eenvoudige grafieken tekent. Deze opgave heb je vorig academiejaar reeds in Java geïmplementeerd.

Nadere informatie

PhotoworkZ pop-up website handleiding

PhotoworkZ pop-up website handleiding PhotoworkZ pop-up website handleiding Inhoudsopgave PhotoworkZ pop-up website handleiding...1 Aanmelden op de admin module...2 Beheer van teksten...3 Tekst downloaden en aanpassen...3 Aanpassen van teksten...4

Nadere informatie

Bij het opstarten van Small Basic verschijnt er de onderstaande werkomgeving.

Bij het opstarten van Small Basic verschijnt er de onderstaande werkomgeving. Small Basic - werkomgeving 1/5 Werkomgeving Bij het opstarten van Small Basic verschijnt er de onderstaande werkomgeving. Bovenaan vind je de werkbalk met opdrachtknoppen. Onder de werkbalk links kan je

Nadere informatie

BASIS TEKSTBEWERKING deel 2

BASIS TEKSTBEWERKING deel 2 BASIS TEKSTBEWERKING deel 2 Opslaan en openen. Opslaan. Om een tekst document te kunnen bewaren, zult u het moeten opslaan op de harde schijf van uw computer. Het blijft daar dan net zo lang staan tot

Nadere informatie

Handleiding Websitebeheer

Handleiding Websitebeheer Handleiding Websitebeheer Event Media Websites Copyright 2005, Event Media 1. Inleiding... 3 2. CMS-systeem... 3 2.1 Inloggen... 3 2.2 Basis-menu... 3 2.3 Bestaande pagina s aanpassen...3 2.4 Nieuwe pagina

Nadere informatie

In het CMS is het mogelijk om formulieren aan te maken. Voorafgaand een belangrijke tip:

In het CMS is het mogelijk om formulieren aan te maken. Voorafgaand een belangrijke tip: FORMULIEREN In het CMS is het mogelijk om formulieren aan te maken. Voorafgaand een belangrijke tip: belangrijk Importeer formulierdata uit een CSV-bestand precies zoals verderop beschreven. 1. Gedrag

Nadere informatie

GEOGEBRA 4. R. Van Nieuwenhuyze. Hoofdlector wiskunde, lerarenopleiding HUB, Brussel. Auteur Van Basis tot Limiet. roger.van.nieuwenhuyze@skynet.

GEOGEBRA 4. R. Van Nieuwenhuyze. Hoofdlector wiskunde, lerarenopleiding HUB, Brussel. Auteur Van Basis tot Limiet. roger.van.nieuwenhuyze@skynet. ? GEOGEBRA 4 R. Van Nieuwenhuyze Hoofdlector wiskunde, lerarenopleiding HUB, Brussel. Auteur Van Basis tot Limiet. roger.van.nieuwenhuyze@skynet.be Roger Van Nieuwenhuyze GeoGebra 4 Pagina 1 1. Schermen

Nadere informatie

HANDLEIDING Q1600 Fashion

HANDLEIDING Q1600 Fashion HANDLEIDING Q1600 Fashion Pag.: 1 Inhoudsopgave Inleiding...3 Beheer...4 Kleurlijsten beheren...4 Kleurlijst groep aanmaken...6 Kleurlijst groep verwijderen...6 Kleuren (kleurnummers) aanmaken/wijzigen...7

Nadere informatie

PhPlist Gebruikers Handleiding

PhPlist Gebruikers Handleiding PhPlist Gebruikers Handleiding Auteur: Sander Duivenvoorden Bedrijf: Buildnet webservices E-mail: support@buildnet.nl Datum: 23-09-2008 Laatste wijziging: 17-10-2008 Versie: 1.1 1 Inleiding Het verzenden

Nadere informatie

Hoe werkt u met een Bordboek Plus?

Hoe werkt u met een Bordboek Plus? Hoe werkt u met een Bordboek Plus? DOWNLOAD UW BORDBOEK PLUS VOOR OFFLINE GEBRUIK Open na de activatie van uw licentie eerst uw Bordboek Plus op Knooppunt. Voortaan kunt u twee versies raadplegen: online

Nadere informatie

RIE Vragenlijst Editor

RIE Vragenlijst Editor Handleiding RIE Vragenlijst Editor Versie 1.0 Datum: 29 oktober 2015 IT&Care B.V. Inhoudsopgave 1. INLEIDING EN VERANTWOORDING... 3 2. OVERZICHT RIE VRAGENLIJSTEN... 4 3. AANMAKEN VAN EEN NIEUWE VRAGENLIJST...

Nadere informatie

MWeb 4.0. Handleiding Basis Modules Versie 1.0

MWeb 4.0. Handleiding Basis Modules Versie 1.0 MWeb 4.0 Handleiding Basis Modules Versie 1.0 Index 1. Algemeen 3 1.1. Gebruikersnamen en Wachtwoorden 3 1.2. Inloggen 3 1.3. Uitloggen 3 1.4. Belangrijk 3 2. User Manager 4 2.1. Gebruikers lijst User

Nadere informatie

HANDLEIDING Q3600 Webshop

HANDLEIDING Q3600 Webshop HANDLEIDING Q3600 Webshop Pag.: 1 Inhoudsopgave Inleiding...3 Beheer...4 Webshop artikelgroepen beheren...4 Hoofd artikelgroep toevoegen...6 Sub artikelgroep toevoegen...7 Artikelgroep verwijderen...8

Nadere informatie

Beschrijving webmail Enterprise Hosting

Beschrijving webmail Enterprise Hosting Beschrijving webmail Enterprise Hosting In dit document is beschreven hoe e-mail accounts te beheren zijn via Enterprise Hosting webmail. Webmail is een manier om gebruik te maken van e-mail functionaliteit

Nadere informatie

Programmeren onder RISC OS: de snelstart. in BBC-Basic

Programmeren onder RISC OS: de snelstart. in BBC-Basic Programmeren onder RISC OS: de snelstart in BBC-Basic Programmeren in RISC OS: de snelstart De programma-directory Vensters maken Een eenvoudige foutprocedure Muis en toetsenbord Een icoon op de icoonbalk

Nadere informatie

Globale kennismaking

Globale kennismaking Globale kennismaking Kennismaking Tesla CMS 1. Dashboard 2. pagina beheer - pagina aanmaken - pagina aanpassen - pagina verwijderen - pagina seo opties - zichtbaarheid pagina 3. subpagina beheer - subpagina

Nadere informatie

Handleiding Berichtensysteem. Multitask ICT bv

Handleiding Berichtensysteem. Multitask ICT bv Handleiding Berichtensysteem Multitask ICT bv Inhoudsopgave 1 Inloggen 3 2 Berichten 4 2.1 Berichten bekijken 5 2.1.1 Ongelezen berichten 5 2.1.2 Zoeken 5 2.1.3 Berichten accorderen 5 2.1.4 Bericht gelezen

Nadere informatie

1. Inleiding van het.net programmeerplatform

1. Inleiding van het.net programmeerplatform 1. Inleiding van het.net programmeerplatform In deze module ga je kennis maken met een programmeeromgeving dat voor de meesten van jullie nieuw is, namelijk: het.net programmeer platform (.NET spreek je

Nadere informatie

Inhoud. VBA Excel 2010

Inhoud. VBA Excel 2010 Inhoud VBA Excel 2010 Inhoudsopgave 0. INSTELLINGEN EXCEL 2010... 9 1. WAT IS VISUAL BASIC FOR APPLICATIONS... 16 1.1. Achtergrond... 16 1.2. VBA is meer dan een macrotaal... 16 Case 1: Macro "Walk of

Nadere informatie

Lab Webdesign: Javascript 7 april 2008

Lab Webdesign: Javascript 7 april 2008 H8: FORMULIEREN In dit hoofdstuk komt het "form"-object aan de orde: we zullen zien hoe we JavaScript kunnen gebruiken voor het manipuleren en valideren van de gegevens die een eindgebruiker invult in

Nadere informatie

Handleiding DIAS scanning. 1. Opstarten. Start eerst DIAS op en daarna het DIAS scanprogramma.

Handleiding DIAS scanning. 1. Opstarten. Start eerst DIAS op en daarna het DIAS scanprogramma. Handleiding DIAS scanning 1. Opstarten Start eerst DIAS op en daarna het DIAS scanprogramma. Indien u het scanprogramma toch probeert te gebruiken zonder dat DIAS is opgestart zult u zien dat het DIAS

Nadere informatie

I) Wat? II) Google documenten. Deel 2 documenten

I) Wat? II) Google documenten. Deel 2 documenten Google Drive Deel 2 documenten I) Wat? 1) De meeste mensen bewerken teksten in de tekstverwerker Word van Microsoft Office. Het is echter ook mogelijk teksten op internet te bewerken en te bewaren. Het

Nadere informatie

Als je geen email-adres hebt kun je bij Google een gmail account aan maken. Als je niet weet hoe dat moet klik dan op: Gmail account aanmaken

Als je geen email-adres hebt kun je bij Google een gmail account aan maken. Als je niet weet hoe dat moet klik dan op: Gmail account aanmaken Om het online programma te kunnen gebruiken het je een account nodig. Wat heb je nodig om een account voor Photo Collage te kunnen aanmaken: Username (gebruikersnaam) Email account Password (wachtwoord

Nadere informatie

Kerstkaart met kerstboom van sneeuwsterren - PowerPoint 2010

Kerstkaart met kerstboom van sneeuwsterren - PowerPoint 2010 Kerstkaart met kerstboom van sneeuwsterren - PowerPoint 2010 Omdat u het kaartje vlugger zou kunnen afwerken, heb ik in bijlage (pps "objecten") alle objecten al klaargemaakt die men nodig heeft. Het muziekbestand

Nadere informatie

Blog-Het gebruik van variabelen in Excel VBA

Blog-Het gebruik van variabelen in Excel VBA Blog-Het gebruik van variabelen in Excel VBA Versie : 2012.01.31.1 (Blog http://www.reinder.eu) Dank voor de leuke reacties op het vorige blog en ook dank voor de kritische noot over het nivo dat de gebruiker

Nadere informatie

Kleine cursus PHP5. Auteur: Raymond Moesker

Kleine cursus PHP5. Auteur: Raymond Moesker Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven

Nadere informatie

Ledenlijsten + etiketten maken

Ledenlijsten + etiketten maken Ledenlijsten + etiketten maken Eerst wordt uitgelegd hoe je een ledenlijst (van alle clubleden of leden per lesjaar) kan opvragen en bewerken en nadien hoe je met deze lijst etiketten kan maken. De ledenlijst

Nadere informatie

Briefhoofd maken in Word. Handleiding van Helpmij.nl

Briefhoofd maken in Word. Handleiding van Helpmij.nl Briefhoofd maken in Word Handleiding van Auteur: CorVerm Januari 2011 We gaan ons deze keer wagen aan het maken van een briefhoofd met invulformulier in Word. De bedoeling is dat we eerst een briefhoofd

Nadere informatie

Mapsource. handleiding Mapsource vs. 6.16.3 2010 www.hansenwebsites.nl

Mapsource. handleiding Mapsource vs. 6.16.3 2010 www.hansenwebsites.nl Mapsource handleiding Mapsource vs. 6.16.3 2010 www.hansenwebsites.nl Inhoud deel 1 Schermindeling Menu s Werkbalken Statusbalk tabbladen Kaartmateriaal Kaartmateriaal selecteren Kaartmateriaal verwijderen

Nadere informatie

Howto Subversion. 1. Subversion structuur en uitleg

Howto Subversion. 1. Subversion structuur en uitleg 1. Subversion structuur en uitleg Op de Adwise VDS server staan de repositories die gebruikt kunnen worden. Een subversion repository bevat alle projecten gerelateerd aan de betreffende repository. Adwise

Nadere informatie

Handleiding Joomla! 1.5

Handleiding Joomla! 1.5 Handleiding Joomla! 1.5 Versie :0.1 2/20 Inhoud 2. Aanmelden... 4 3. Artikelbeheer... 5 3.1 Nieuw artikel toevoegen... 5 3.2 Bestaand artikel wijzigen/verwijderen... 6 3.2.1 Front end editing... 7 4. Sectie

Nadere informatie

Handleiding CMS-systeem website

Handleiding CMS-systeem website Handleiding CMS-systeem website Algemeen!Belangrijk! Wijzigingen die gedaan worden in het systeem kunnen niet zomaar ongedaan worden gemaakt. Eenmaal een pagina of iets anders verwijderd, zal deze niet

Nadere informatie