VB 2 – Blokowa instrukcja warunkowa If
Copyright © 2012, Witold Marowski, Janusz Bonarowski
1
Blokowa instrukcja warunkowa (według pomysłu dr hab. W. Marowskiego)
Zadanie
Wykonać aplikację, która wskazuje porę roku w zależności od daty wybranej w kalendarzu.
Rozwiązanie 1 – zgrubne (uproszczone)
Jeśli przyjmiemy oś czasu i zaznaczymy na niej miesiące, to „zgrubnie” można przyjąć, że pory roku określone są miesiącami: styczeń, luty i marzec – to Zima, kwiecień, maj, czerwiec – Wiosna, itd., patrz rys. 1.
Rys. 1. Zależność pór roku od daty (miesiąca) – założenie zgrubne
Realizacja w VB:
Projekt formularza pokazuje rys. 2.
Rys. 2. Projekt formularza z nazwami obiektów
Z nowych obiektów to DataTimePicker, nazwany dtpData – obiekt pozwalający na wybór daty lub godziny.
Kod powinien realizować obsługę zdarzenia „zmiana wartości wybranej w dtpData” w ten sposób, że w txtPoraRoku wyświetlona zostanie pora roku zgodnie z rys. 1.
Private Sub dtpData_ValueChanged(ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles dtpData.ValueChanged If dtpData.Value.Month <= 3 Then
txtPoraRoku.Text = "Zima"
ElseIf dtpData.Value.Month <= 6 Then txtPoraRoku.Text = "Wiosna"
ElseIf dtpData.Value.Month <= 9 Then txtPoraRoku.Text = "Lato"
Else
txtPoraRoku.Text = "Jesień"
End If End Sub
Proszę zauważyć, że nie badamy, czy numer miesiąca zawiera liczby 10, 11 lub 12.
Rozumujemy, że jeśli numer miesiąca nie mieści się w przedziale 1 - 9 to oznacza, że zawiera
jedną z liczb 10, 11 lub 12. Stąd słowo kluczowe
Else, a nie ElseIF.VB 2 – Blokowa instrukcja warunkowa If
Copyright © 2012, Witold Marowski, Janusz Bonarowski
2
Rozwiazanie 2 – (dni graniczne)
Niech zmiany pór roku będą określane szczególnymi datami (nie tylko miesiąc, ale określony dzień miesiąca) zgodnie z rys. 3.
Rys. 3.
Kod aplikacji musi zatem badać nie tylko określone miesiące graniczne, ale dodatkowo także graniczny dzień w tym miesiącu.
Private Sub dtpData_ValueChanged(ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles dtpData.ValueChanged If dtpData.Value.Month < 3 Then
txtPoraRoku.Text = "Zima"
ElseIf dtpData.Value.Month = 3 Then If dtpData.Value.Day <= 20 Then txtPoraRoku.Text = "Zima"
Else
txtPoraRoku.Text = "Wiosna"
End If
ElseIf dtpData.Value.Month < 6 Then txtPoraRoku.Text = "Wiosna"
ElseIf dtpData.Value.Month = 6 Then If dtpData.Value.Day <= 20 Then txtPoraRoku.Text = "Wiosna"
Else
txtPoraRoku.Text = "Lato"
End If
ElseIf dtpData.Value.Month < 9 Then txtPoraRoku.Text = "Lato"
ElseIf dtpData.Value.Month = 9 Then If dtpData.Value.Day <= 20 Then txtPoraRoku.Text = "Lato"
Else
txtPoraRoku.Text = "Jesień"
End If
ElseIf dtpData.Value.Month < 12 Then txtPoraRoku.Text = "Jesień"
Else
If dtpData.Value.Day <= 20 Then txtPoraRoku.Text = "Jesień"
Else
txtPoraRoku.Text = "Zima"
End If End If End Sub