Copyright © 2009 Janusz Bonarowski 1
Ć wiczenie VB2.1_If – instrukcja warunkowa
Jeśli nie zastosujemy specjalnych technik - instrukcje w procedurach wykonywane są sekwencyjnie. Oznacza to, że wykonują się jedna po drugiej, poczynając od pierwszej, a kończąc na ostatniej, kolejno, żadnej nie opuszczając. Aby zmienić sekwencyjny porządek wykonywania instrukcji programu stosujemy instrukcję warunkową. Instrukcja warunkowa ma następującą składnię (postać pełna):
Listing1
If warunek1 Then
'Lista1 instrukcji wykonywanych ' gdy warunek1 jest spełniony.
ElseIf warunek2 Then
'Lista2 instrukcji wykonywanych ' gdy warunek2 jest spełniony.
ElseIf warunek3 Then
'Lista3 instrukcji wykonywanych ' gdy warunek3 jest spełniony.
'. . .
ElseIf warunekN Then
'ListaN instrukcji wykonywanych ' gdy warunekN jest spełniony.
Else
'Lista instrukcji wykonywanych
' gdy żaden z warunków nie został spełniony.
End If
'Pierwsza instrukcja po instrukcji warunkowej.
Instrukcja warunkowa musi rozpoczynać się od słowa kluczowego If i kończyć się słowami kluczowymi End If.
Działanie instrukcji warunkowej jest następujące:
Gdy program dochodzi do pierwszego wiersza instrukcji ze słowem kluczowym If sprawdzany jest warunek1. Jeżeli warunek1 posiada wartość True (Prawda) wykonywana jest Lista1 instrukcji, aż do najbliższej instrukcji ze słowem kluczowym ElseIf, Else lub End If. Gdy to nastąpi sterowanie programem opuszcza wszystkie pozostałe instrukcje bloku instrukcji warunkowej i dalsze wykonywanie programu kontynuowane jest od Pierwszej instrukcji po instrukcji warunkowej.
Jeżeli warunek1 ma wartość False (Fałsz) Lista1 instrukcji jest pomijana i sprawdzany jest warunek2. Jeśli warunek2 posiada wartość True (Prawda) wykonywana jest Lista2
instrukcji, aż do najbliższej instrukcji ze słowem kluczowym ElseIf, Elselub End If i następnie wykonywana jest Pierwsza instrukcja po instrukcji
warunkowej.
Jeżeli warunek2 ma wartość False (Fałsz) Lista2 instrukcji jest także pomijana i sprawdzany jest warunek3. Jeśli warunek3 posiada wartość True (Prawda) wykonywana jest Lista3 instrukcji, aż do najbliższej instrukcji ze słowem kluczowym ElseIf, Else lub End If i następnie wykonywana jest Pierwsza instrukcja po instrukcji warunkowej.
Bloków instrukcji:
ElseIf warunek Then 'Lista instrukcji może być dowolnie wiele.
Jeśli żaden z warunków nie zostanie spełniony (nie posiada wartości True (Prawda)) – sterowanie przechodzi do listy instrukcji znajdujących się po słowie kluczowym Else.
Copyright © 2009 Janusz Bonarowski 2 W ten sposób, w zależności od wartości warunków może być wykonywana inna grupa instrukcji programu.
Listing1 przedstawia pełną postać instrukcji warunkowej. Dla własnych potrzeb można taką postać redukować. Np. podczas rozwiązywania równania kwadratowego
obliczamy wyróżnik Delta, a następnie w zależności od jego wartości - obliczamy pierwiastki równania lub drukujemy komunikat o ich braku. Instrukcja warunkowa mogłaby mieć wtedy postać:
Listing 2
If Delta < 0 Then
'Komunikat o braku pierwiastków 'w zakresie liczb rzeczywistych.
ElseIf Delta = 0 Then
'Obliczenie jednego pierwiastka podwójnego.
Else
'Obliczenie dwóch różnych pierwiastków.
End If
Instrukcja warunkowa może być jeszcze bardziej zminimalizowana, patrz Listing 3.
Listing 3
If warunek Then
'Lista instrukcji Else
'Inna lista instrukcji End If
Lub jeszcze bardziej zredukowana, patrz Listing 4
Listing 4
If warunek Then
'Lista instrukcji End If
Przećwiczmy konstrukcje instrukcji warunkowej.
Zadanie
Zbudować aplikację symulującą dialog wg tabeli 1. Propozycja formularza przedstawiona jest na rys. 1
Tabela1 Wpis Odpowiedź Cześć Dzień dobry Witam Moje uszanowanie
Serwus Siema
Inny tekst Nie rozumiem
Rys. 1. Propozycja formularza
Copyright © 2009 Janusz Bonarowski 3 Kod aplikacji
Listing 5
Private Sub btnOdp_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnOdpowiedź.Click If txtWpis.Text = "Cześć" Then
lblOdp.Text = "Dzień dobry"
ElseIf txtWpis.Text = "Witam" Then lblOdp.Text = "Moje uszanowanie"
ElseIf txtWpis.Text = "Serwus" Then lblOdp.Text = "Siema"
Else
lblOdp.Text = "Nie rozumiem"
End If End Sub
--- Private Sub btnKoniec_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnKoniec.Click Application.Exit()
End Sub
Podczas testowania programu może wydać się niepożądanym fakt, że na formularzu może być widoczna następująca sytuacja. Po przetestowaniu pierwszej części instrukcji
warunkowej wpis brzmi „Cześć”, a odpowiedź „Dzień dobry”. Następnie zmieniamy wpis na
„Witam”, a odpowiedź w dalszym ciągu pozostaje „Dzień dobry” – co jest niezgodne z tabelą 1.
Rozwiązaniem takiego problemu może być oprogramowanie zdarzenia „zmiana tekstu w obiekcie txtWpis” w taki sposób, że gdy zmieniany jest tekst w txtWpis, to wówczas
kasowana jest zawartość etykiety lblOdp. Proponowany kod tej procedury zawiera Listing 6 Listing 6
Private Sub txtWpis_TextChanged(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles txtWpis.TextChanged lblOdp.Text = ""
End Sub