Rekenmachine
1. Inleiding
2. Een form opstellen
3. Invoer regelen
4. Afhandeling van het 2de getal
5 . De uitkomst
6. De andere tekens en verder rekenen
7. De afwerking
1. Inleiding
Naar aanleiding van de tutorial van Titjes (inleiding op windows forms), waar al een begin wordt gemaakt van een mini-rekenmachine, wilde ik iets verder gaan en een echt rekenmachine maken. Dit is iets moeilijker, maar blijft nog steeds binnen het begin van Visual Basic. Ik zal alles stap voor stap en zo gedetailleerd mogelijk uitleggen.
top
2. Een form opstellen
We starten eerst met een design te maken van ons form. Wat hebben we nodig ?
- 9 buttons voor de nummers
- 1 button voor de komma
- 1 button voor de "Clear" knop
- 4 buttons voor de bewerkingen
- 1 button voor de "=" knop
- 1 text box voor de getallen te tonen
Als je alles hebt geschikt dan ziet het er bijvoorbeeld zo uit:
Ik heb alle nummer buttons de naam gegeven nr(en dat het nummertje wat op de button staat)
top
3. Invoer regelen
Eerst moeten we een stukje code maken zodat als je op een button klikt dat het bijbehorende nummer ook in het invoer vlak verschijnt. Dit kan gedaan worden met dit stukje code
Private Sub nr0_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles btnZero.Click
display.Text = nr0.Text
End Sub
Dit stukje code zorgt ervoor dat de text property van de button wordt overgezet naar de text property van de textbox. Maar het enige probleem dat dit stukje code oplevert is dat als je 2 cijfers wilt ingeven dat het eerste cijfer weg gaat en enkel het 2de cijfer blijft staan, dat kunnen we oplossen met een kleine verandering
Private Sub nr0_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles btnZero.Click
display.Text = display.Text & nr0.Text
End Sub
Het onderlijnde stukje code zorgt er voor dat bij de waarde die al wordt getoond op het scherm de nieuwe waarde wordt toegevoegd. Bovenstaande code kan je bij elke button gebruiken, juist dat je "nr0" moet vervangen door de naam van de button.
top
4. Afhandeling van het 2de getal
Dit is hoe we willen dat het script gaat werken (Als voorbeeld nemen we 5 +9):
Klik eerst op 5
Een 5 verschijnt in de textbox
Klik op het + knopje
De 5 verdwijnt uit de textbox
Klik op 9
Een 9 verschijnt in de textbox
Klik op het = knopje
De 9 verdwijnt uit de textbox
Het antwoord verschijnt
Klik op de Clear knop om de textbox terug leeg te maken
De eerste 2 stappen hebben we al gedaan nu gaan we de volgende 2 stappen uitvoeren.
We gaan ook alvast dan de 2 waardes die we nodig hebben bovenaan aanmaken.
Dim totaal1 As Double
Dim totaal2 As Double
Nu gaan we aan totaal1 vullen met de eerste waarde:
totaal1 = totaal1 + Convert.ToDouble(display.Text)
Nu hebben we het getal vanuit de textbox in totaal1 gebracht, dan gaan we de display leeg maken
display.Clear()
Dan hebben we deze code:
Private Sub plus_Click(ByVal sender As System.Object, _ByVal e As System.EventArgs) _Handles plus.Click
totaal1 = totaal1 + Convert.ToDouble(display.Text) display.Clear()
End Sub
Waarom gebruiken we hier Convert.ToDouble() en niet gewoon Val()?
Omdat we met ons rekenmachine ook getallen met komma's willen gebruiken. De functie Val() zet een string die in de textbox staat om naar een integer, dit datatype ondersteund enkel getallen zonder komma. Dus daarom gaan we voor een Double datatype, daardoor moeten we onze functie ook aanpassen van Val() naar Convert.ToDouble() zodat de komma getallen helemaal bewaard worden in onze variable.
top
5. De uitkomst
Nu willen we als we op de = knop klikken dat het 2de getal wordt opgeslagen in totaal 2 en direct de bewerking uitgevoerd wordt.
Dat doen we zo voor de som:
totaal2 = totaal1 + Convert.ToDouble(display.Text)
Het enige wat we dan nog moeten doen is totaal2 tonen in de display en dat kunnen we zo doen:
display.Text = totaal2
Dat levert dan deze code op:
Private Sub uitkomst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles uitkomst.Click
totaal2 = totaal1 + Convert.ToDouble(display.Text) display.Text = totaal2
End Sub
6. De andere tekens en verder rekenen
We willen nu ook dat de andere tekens werken daarvoor hoeven we enkel dezelfde code te gebruiken dan die van de + knop. We gaan ook een Boolean waarde aanmaken bij iedere bewerking zo dat we bij de = knop onderscheidt kunnen maken tussen iedere bewerking. Dit is dan de code:
Private Sub plus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles plus.Click totaal1 = totaal1 + Convert.ToDouble(display.Text) bol_plus = True
display.Clear() End Sub Private Sub min_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles min.Click totaal1 = totaal1 + Convert.ToDouble(display.Text) bol_min = True
display.Clear() End Sub Private Sub maal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles maal.Click totaal1 = totaal1 + Convert.ToDouble(display.Text) bol_maal = True
display.Clear() End Sub Private Sub delen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles delen.Click totaal1 = totaal1 + Convert.ToDouble(display.Text) bol_delen = True
display.Clear()
End Sub
Dan verandert er ook iets bij de = knop, omdat we nu werken met die boolean waarde kunnen we de bewerkingen correct uitvoeren. Deze code wordt ervoor gebruikt:
Private Sub uitkomst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles uitkomst.Click If bol_plus = True Then totaal2 = totaal1 + Convert.ToDouble(display.Text) ElseIf bol_min = True Then totaal2 = totaal1 - Convert.ToDouble(display.Text) ElseIf bol_maal = True Then totaal2 = totaal1 * Convert.ToDouble(display.Text) ElseIf bol_delen = True Then
totaal2 = totaal1 / Convert.ToDouble(display.Text) End If display.Text = totaal2 totaal1 = 0 totaal2 = 0 bol_plus = False bol_min = False bol_maal = False bol_delen = False verder_nieuw = True
End Sub
Hier zien we een aantal nieuwe dingen staan:
- We gaan de boolean waardes van de bewerkingen terug op false zetten zodat we correct verder kunnen rekenen
- De boolean waarde verder_nieuw gebruiken we om verder te rekenen, standaard staat deze op true. Het programma controleert of deze op true staat zo ja dan maken we de display leeg en kunnen we verder rekenen met de uitkomst.
Waarom speciaal een boolean aanmaken voor verder te rekenen?
Omdat als we gewoon verder zouden rekenen zonder die boolean dan zou alles in de display blijven staan en als je dan wilt verder rekenen en bijvoorbeeld nummer 2 wordt ingedrukt dan wordt de 2 achteraan de uitkomst toegevoegd in plaatst van erbij opgeteld.
7. De afwerking
Hier gaan we nu de 2 laatste knopjes afwerken, namelijk de ","-knop en de "clear"-knop. De ","-knop is simpel en werkt zoals we alle cijfer knoppen hebben gemaakt, zo:
Private Sub komma_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles komma.Click display.Text = display.Text & komma.Text
End Sub
De Clear-knop is ook gemakkelijk, want met deze knop gaan we de display leeg maken en de 2 waardes gelijk stellen aan 0.
Private Sub clear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles clear.Click display.Clear() totaal1 = 0 totaal2 = 0 End Sub
Voila nu is ons volledig script af en is dit onze code:
Public Class rekenblad 'vaste waardes Dim totaal1 As Double Dim totaal2 As Double Dim verder_nieuw As Boolean Dim bol_plus As Boolean Dim bol_min As Boolean Dim bol_maal As Boolean Dim bol_delen As Boolean
Private Sub nr0_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nr0.Click If verder_nieuw = True Then display.Clear() End If display.Text = display.Text & nr0.Text verder_nieuw = False End Sub
Private Sub nr1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nr1.Click If verder_nieuw = True Then display.Clear() End If display.Text = display.Text & nr1.Text verder_nieuw = False End Sub
Private Sub nr2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nr2.Click If verder_nieuw = True Then display.Clear() End If display.Text = display.Text & nr2.Text() verder_nieuw = False End Sub
Private Sub nr3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nr3.Click If verder_nieuw = True Then display.Clear() End If display.Text = display.Text & nr3.Text verder_nieuw = False End Sub
Private Sub nr4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nr4.Click If verder_nieuw = True Then display.Clear() End If display.Text = display.Text & nr4.Text verder_nieuw = False End Sub
Private Sub nr5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nr5.Click If verder_nieuw = True Then display.Clear() End If display.Text = display.Text & nr5.Text verder_nieuw = False End Sub
Private Sub nr6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nr6.Click If verder_nieuw = True Then display.Clear() End If display.Text = display.Text & nr6.Text verder_nieuw = False End Sub
Private Sub nr7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nr7.Click If verder_nieuw = True Then display.Clear() End If display.Text = display.Text & nr7.Text verder_nieuw = False End Sub
Private Sub nr8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nr8.Click If verder_nieuw = True Then display.Clear() End If display.Text = display.Text & nr8.Text verder_nieuw = False End Sub
Private Sub nr9_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nr9.Click If verder_nieuw = True Then display.Clear() End If display.Text = display.Text & nr9.Text verder_nieuw = False End Sub Private Sub clear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles clear.Click display.Clear() totaal1 = 0 totaal2 = 0 End Sub Private Sub komma_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles komma.Click display.Text = display.Text & komma.Text End Sub Private Sub plus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles plus.Click totaal1 = totaal1 + Convert.ToDouble(display.Text) bol_plus = True
display.Clear() End Sub Private Sub min_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles min.Click totaal1 = totaal1 + Convert.ToDouble(display.Text) bol_min = True
display.Clear() End Sub Private Sub maal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles maal.Click totaal1 = totaal1 + Convert.ToDouble(display.Text) bol_maal = True
display.Clear() End Sub Private Sub delen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles delen.Click totaal1 = totaal1 + Convert.ToDouble(display.Text) bol_delen = True
display.Clear() End Sub Private Sub uitkomst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles uitkomst.Click If bol_plus = True Then totaal2 = totaal1 + Convert.ToDouble(display.Text) ElseIf bol_min = True Then totaal2 = totaal1 - Convert.ToDouble(display.Text) ElseIf bol_maal = True Then totaal2 = totaal1 * Convert.ToDouble(display.Text) ElseIf bol_delen = True Then totaal2 = totaal1 / Convert.ToDouble(display.Text) End If display.Text = totaal2 totaal1 = 0 totaal2 = 0 bol_plus = False bol_min = False bol_maal = False bol_delen = False verder_nieuw = True End Sub
End Class
Dat was het dan nu heb je je eigen rekenmachine gemaakt, ik hoop dat jullie er iets van geleerd hebben. Vergeet niet te stemmen op deze tutorial en eventuele fouten te melden
|