Galileo Computing < openbook >
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung
Galileo Computing - Bücher zur Programmierung und Softwareentwicklung

...powered by haas.homelinux.net...

Einstieg in VB.NET von René Martin
- Für Programmiereinsteiger -
Einstieg in VB.NET
gp Kapitel 2 Aufbauwissen VB.NET
  gp 2.1 Ein zweiter Dialog
  gp 2.2 Ein Süßigkeitenautomat
  gp 2.3 Eine Listbox
  gp 2.4 With ... End With
  gp 2.5 Die Liste
  gp 2.6 Eine ComboBox
  gp 2.7 Die Select-Case-Verzweigung
  gp 2.8 Ein theoretischer Exkurs: Ereignisse
    gp 2.8.1 Dynamisch ein- und ausblenden
    gp 2.8.2 Dynamische Größenänderung
  gp 2.9 Zwei völlig überflüssige Beispiele
  gp 2.10 Schleifen
  gp 2.11 For ... Next
  gp 2.12 Do ... Loop
  gp 2.13 Eine Schleife über den Süßigkeiten
  gp 2.14 Ein theoretischer Exkurs: Sammlungen oder Collections
  gp 2.15 Die For ... Each-Schleife
  gp 2.16 Schleifen spielerisch
    gp 2.16.1 Primzahlen
    gp 2.16.2 Fibonacci-Zahlen
    gp 2.16.3 ggT und kgV
    gp 2.16.4 Ein Scherz zum Schluss
  gp 2.17 Rekursives Programmieren
  gp 2.18 Arrays (Datenfelder)
    gp 2.18.1 Eindimensionale Arrays
    gp 2.18.2 Mehrdimensionale Arrays
  gp 2.19 Konstanten
  gp 2.20 Funktionen
  gp 2.21 Zusammenfassung


Galileo Computing

2.7 Die Select-Case-Verzweigung  toptop

Manchmal sind es zu viele Fälle, die nicht mit hintereinander geschalteten und auch nicht verschachtelten If-Verzweigungen gestaltet werden können oder sollen. Dafür steht ein weiterer Verzweigungstyp zur Verfügung: die Case-Verzweigung.

Select Case Variable
   Case Wert1
      Anweisung1
   Case Wert2
      Anweisung2
   Case Wert3
      Anweisung3
[...]
   [Case Else]
      [Letzte Anweisung]
End Select

Also beispielsweise:

Select Case Bedürfnis
   Case Lust
      Süßigkeiten = "Nougat"
   Case Hunger
      Süßigkeiten = "Chips"
   Case Spieltrieb
      Süßigkeiten = "Kinderschokolade"
   Case Besuch
      Süßigkeiten = "Gummibärchen"
   Case Halsweh
      Süßigkeiten = "Hustenbonbons"
   Case Else
      Süßigkeiten = "Marzipan"
End Select

Das versuchen wir doch mal. Ich hatte vor kurzem eine kleine Rechenaufgabe. Gesucht war die Anzahl der vergangenen Monate eines Geschäftsjahrs. Das Geschäftsjahr fängt im April an, also aus 4 wird 1, aus 5 (Mai) wird 2, ... aus 12 (Dezember) wird 9, aus 1 (Januar) wird 10, ... und aus 3 wird 12.

Sub Geschäftsjahr1()
   Dim intMonat As Integer
   Dim intAusgabeMonate As Integer
   Dim strText As String

   intMonat = Me.txtMonat.Text
   Select Case intMonat
      Case 1, 2, 3
         intAusgabeMonate = intMonat + 9
         strText = "Es sind " & _
         intAusgabeMonate.ToString() & _
            " Monate vergangen."
      Case 4
         intAusgabeMonate = intMonat - 3
         strText = "Es ist " & _
         intAusgabeMonate.ToString() & _
            " Monat vergangen."
      Case Else
         intAusgabeMonate = intMonat - 3
         strText = "Es sind " & _
         intAusgabeMonate.ToString() & _
            " Monate vergangen."
   End Select
   MessageBox.Show(strText)
End Sub

Und nun eine Variante, die auch funktioniert:

Sub Geschäftsjahr2()
   Dim intMonat As Integer
   Dim intAusgabeMonate As Integer
   Dim strText As String

   intMonat = Me.txtMonat.Text
   Select Case intMonat
      Case 1 To 3
         intAusgabeMonate = intMonat + 9
         strText = "Es sind " & _
         intAusgabeMonate.ToString() & _
         " Monate vergangen."
      Case 4
         intAusgabeMonate = intMonat - 3
         strText = "Es ist " & _
         intAusgabeMonate.ToString() & _
            " Monat vergangen."
      Case Is > 4
         intAusgabeMonate = intMonat - 3
         strText = "Es sind " & _
         intAusgabeMonate.ToString() & _
         " Monate vergangen."
   End Select
   MessageBox.Show(strText)
End Sub

Nach Case kann also entweder ein Wert stehen, mehrere Werte durch Kommata getrennt oder zwei Werte mit allen Zwischenwerten mit einem To verbunden oder auch Is und ein Vergleichsoperator.

Wann aber verwendet man nun If...Then...Else und wann Select Case? Ich komme fast immer mit If ... Then ... Else aus. Wird nur eine Bedingung überprüft, dann finde ich sie auch übersichtlicher. Wenn ich allerdings mehrere Werte gleichzeitig überprüfen möchte, dann hilft mir Select Case. Beispielsweise ist:

If strMonat = "Januar" Or strMonat = "Februar" _
Or strMonat = "März" Or strMonat = "April" Then

sehr lang und umständlich. Kürzer ist:

Select Case strMonat
   Case "Januar", "Februar", "März", "April"

Oft aber kann die eine oder die andere Verzweigung verwendet werden. Dieses Mal soll die Abfrage der ComboBox mit der Select-Case-Verzweigung durchgeführt werden:

Select Case cboAuswahl.SelectedIndex
   Case 0
      Me.lstListe.SelectionMode = _
      Windows.Forms.SelectionMode.One
   Case 1
      Me.lstListe.SelectionMode = _
      Windows.Forms.SelectionMode.MultiExtended
   Case 2
      Me.lstListe.SelectionMode = _
      Windows.Forms.SelectionMode.MultiSimple
End Select
Abbildung

Abbildung 2.9   Eine Mehrfachauswahl ist möglich.

Bei der Listbox hatten wir den Fall, dass der Benutzer fälschlicherweise nichts auswählt. Und hier? Kann er hier nichts auswählen? Viel schlimmer: Es gibt tatsächlich Benutzer, die schreiben Text in die Combobox. Und sie verschreiben sich natürlich. Es genügt, hinter »Einzelauswahl« ein Leerzeichen einzugeben. Und schon trifft keiner der drei vorgegebenen Fälle mehr zu. Deshalb wird auch dieser Fall abgefangen:

...
   Case 2
      Me.lstListe.SelectionMode = _
      Windows.Forms.SelectionMode.MultiSimple
   Case Else
      Messagebox.Show("Der eingegebene Wert ist kein " & _
      "Eintrag der Liste”)
      lstListe.SelectedIndex = 0
End Select
Abbildung

Abbildung 2.10   Leider wird dieser Fehler so nicht abgefangen.

  

VB.NET

Einstieg in ASP.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML