Copyright © 2009 Janusz Bonarowski
1
VB_3.1_Kalkulator
Wykonajmy aplikację pozwalająca dokonywać obliczeń z wykorzystaniem wartości wprowadzonych w okna tekstowe, patrz propozycja formularza na rys. 1.
Rys. 1. Propozycja formularza
Aplikację zabezpieczymy przed brakiem danych lub przed próbą wykonania działań gdy dane są błędne – np. wpisano litery zamiast cyfr.
Przed próbą wykonania działań, gdy nie wpisano żadnych danych zabezpieczymy się konstrukcją:
If txtA.Text = "" Then
Label2.Text = "Proszę wprowadzić pierwszą liczbę"
Exit Sub End If
Konstrukcja ta spowoduje opuszczenie procedury (Exit Sub)jeśli w oknie tekstowym znajduje się pusty łańcuch tekstowy.
Aby stwierdzić czy wprowadzony ciąg znaków jest liczbą stosujemy funcję IsNumeric.
Funkcja ta ma jeden argument (właśnie łańcuch znaków), a zwraca prawdę lub fałsz w zależności od tego, czy łańcuch znaków jest czy nie jest liczbą:
If Not IsNumeric(txtA.Text) Then
Label2.Text = "A nie jest liczbą!"
Exit Sub End If
Przed wykonaniem działań algebraicznych ciągi znaków znajdujące się w oknach tekstowych trzeba zamienić na ich reprezentację liczbową. Dokonujemy tego stosując funkcje konwersji.
Przykładowe funkcje:
CSng – konwersja do typu Single CDbl – konwersja do typu Double CInt – konwersja do typu Integer CStr – konwersja do typu String lub funkcje
Single.Parse – konwersja do typu Single Double.Parse – konwersja do typy Double Integer.Parse – konwersja do typu Integer
NazwaZmiennej.ToString – konwersja do typu String
Copyright © 2009 Janusz Bonarowski
2 Kody procedur
Private Sub btnPlus_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnPlus.Click Dim A, B, W As Single
If txtA.Text = "" Then
Label2.Text = "Proszę wprowadzić pierwszą liczbę"
Exit Sub End If
If Not IsNumeric(txtA.Text) Then
Label2.Text = "A nie jest liczbą!"
Exit Sub End If
If txtB.Text = "" Then
Label2.Text = "Proszę wprowadzić drugą liczbę"
Exit Sub End If
If Not IsNumeric(txtB.Text) Then
Label2.Text = "B nie jest liczbą!"
Exit Sub End If
A = CSng(txtA.Text) B = CSng(txtB.Text) W = A + B
lblW.Text = W.ToString End Sub
Private Sub btnMinus_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnMinus.Click Dim A, B, W As Single
If txtA.Text = "" Then
Label2.Text = "Proszę wprowadzić pierwszą liczbę"
Exit Sub End If
If Not IsNumeric(txtA.Text) Then
Label2.Text = "A nie jest liczbą!"
Exit Sub End If
If txtB.Text = "" Then
Label2.Text = "Proszę wprowadzić drugą liczbę"
Exit Sub End If
If Not IsNumeric(txtB.Text) Then
Label2.Text = "B nie jest liczbą!"
Exit Sub End If
A = CSng(txtA.Text) B = CSng(txtB.Text) W = A - B
lblW.Text = W.ToString End Sub
Copyright © 2009 Janusz Bonarowski
3
Private Sub btnMnozenie_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnMnozenie.Click Dim A, B, W As Single
If txtA.Text = "" Then
Label2.Text = "Proszę wprowadzić pierwszą liczbę"
Exit Sub End If
If Not IsNumeric(txtA.Text) Then
Label2.Text = "A nie jest liczbą!"
Exit Sub End If
If txtB.Text = "" Then
Label2.Text = "Proszę wprowadzić drugą liczbę"
Exit Sub End If
If Not IsNumeric(txtB.Text) Then
Label2.Text = "B nie jest liczbą!"
Exit Sub End If
A = CSng(txtA.Text) B = CSng(txtB.Text) W = A * B
lblW.Text = W.ToString End Sub
Private Sub btnDzielenie_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnDzielenie.Click Dim A, B, W As Single
If txtA.Text = "" Then
Label2.Text = "Proszę wprowadzić pierwszą liczbę"
Exit Sub End If
If Not IsNumeric(txtA.Text) Then
Label2.Text = "A nie jest liczbą!"
Exit Sub End If
If txtB.Text = "" Then
Label2.Text = "Proszę wprowadzić drugą liczbę"
Exit Sub End If
If Not IsNumeric(txtB.Text) Then
Label2.Text = "B nie jest liczbą!"
Exit Sub End If
A = CSng(txtA.Text) B = CSng(txtB.Text) If B = 0 Then
Label2.Text = "dzielenie przez zero!"
Exit Sub End If
W = A / B
lblW.Text = W.ToString End Sub
Copyright © 2009 Janusz Bonarowski
4
Private Sub btnPotega_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnPotega.Click Dim A, B, W As Single
If txtA.Text = "" Then
Label2.Text = "Proszę wprowadzić pierwszą liczbę"
Exit Sub End If
If Not IsNumeric(txtA.Text) Then
Label2.Text = "A nie jest liczbą!"
Exit Sub End If
If txtB.Text = "" Then
Label2.Text = "Proszę wprowadzić drugą liczbę"
Exit Sub End If
If Not IsNumeric(txtB.Text) Then
Label2.Text = "B nie jest liczbą!"
Exit Sub End If
A = CSng(txtA.Text) B = CSng(txtB.Text) W = A ^ B
lblW.Text = W.ToString End Sub
Private Sub btnSin_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSin.Click Dim A As Single
Dim rad, W As Double If txtA.Text = "" Then
Label2.Text = "Proszę wprowadzić kąt w stopniach"
Exit Sub End If
If Not IsNumeric(txtA.Text) Then
Label2.Text = "A nie jest liczbą!"
Exit Sub End If
A = CSng(txtA.Text) rad = A * Math.PI / 180 W = Math.Sin(rad)
lblW.Text = W.ToString End Sub