Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einführung
2 Grundlagen
3 Fehlerbehandlung
4 Erweiterte Grundlagen
5 Objektorientierte Programmierung
6 Wichtige Klassen in .NET
7 Weitere Elemente eines Windows-Programms
8 Datenbank-Anwendungen mit ADO.NET
9 Internet-Anwendungen mit ASP.NET
10 Zeichnen mit GDI+
11 Beispielprojekte
A Installation und technische Hinweise
B Lösungen der Übungsaufgaben
Stichwort

Download:
- ZIP, ca. 7,8 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Einstieg in Visual Basic 2010 von Thomas Theis
Inkl. Visual Studio Express Editions
Buch: Einstieg in Visual Basic 2010

Einstieg in Visual Basic 2010
2., akt. und erw. Aufl., Klappbroschur, mit DVD
467 S., 24,90 Euro
Galileo Computing
ISBN 978-3-8362-1541-1
Pfeil 4 Erweiterte Grundlagen
Pfeil 4.1 Steuerelemente aktivieren
Pfeil 4.1.1 Ereignis Enter
Pfeil 4.1.2 Eigenschaften Enabled und Visible
Pfeil 4.2 Bedienung per Tastatur
Pfeil 4.2.1 Eigenschaften TabIndex und TabStop
Pfeil 4.2.2 Tastenkombination für Steuerelemente
Pfeil 4.3 Ereignisgesteuerte Programmierung
Pfeil 4.3.1 Eine Ereigniskette
Pfeil 4.3.2 Endlose Ereignisketten
Pfeil 4.3.3 Textfelder koppeln
Pfeil 4.4 Mehrere Formulare
Pfeil 4.4.1 Allgemeine Code-Module
Pfeil 4.5 Datenfelder
Pfeil 4.5.1 Eindimensionale Datenfelder
Pfeil 4.5.2 Ein Feld durchsuchen
Pfeil 4.5.3 Weitere Feld-Operationen
Pfeil 4.5.4 Mehrdimensionale Datenfelder
Pfeil 4.5.5 Datenfelder initialisieren
Pfeil 4.5.6 Datenfelder sind dynamisch
Pfeil 4.5.7 Collections initialisieren
Pfeil 4.5.8 For-Each-Schleife
Pfeil 4.6 Datenstruktur ArrayList
Pfeil 4.7 Benutzerdefinierte Datentypen
Pfeil 4.8 Prozeduren und Funktionen
Pfeil 4.8.1 Prozeduren
Pfeil 4.8.2 Übergabe per Referenz
Pfeil 4.8.3 Funktionen
Pfeil 4.8.4 Optionale Argumente
Pfeil 4.8.5 Beliebig viele Argumente
Pfeil 4.8.6 Datenfelder als Argumente
Pfeil 4.8.7 Rekursiver Aufruf
Pfeil 4.8.8 Übungen zu Prozeduren und Funktionen
Pfeil 4.9 Konsolenanwendung
Pfeil 4.9.1 Anwendung erzeugen
Pfeil 4.9.2 Ein- und Ausgabe von Text
Pfeil 4.9.3 Eingabe einer Zahl
Pfeil 4.9.4 Erfolgreiche Eingabe einer Zahl
Pfeil 4.9.5 Ausgabe formatieren
Pfeil 4.9.6 Aufruf von der Kommandozeile


Galileo Computing - Zum Seitenanfang

4.5 Datenfelder Zur nächsten ÜberschriftZur vorigen Überschrift

Man verwendet Datenfelder, um eine größere Menge zusammengehöriger Daten des gleichen Datentyps mit dem gleichen Variablennamen anzusprechen und zu speichern. Datenfelder können ein- oder mehrdimensional sein.

Im Zusammenhang mit Feldern werden häufig Schleifen eingesetzt. Diese ermöglichen es, alle Elemente eines Felds anzusprechen.


Galileo Computing - Zum Seitenanfang

4.5.1 Eindimensionale Datenfelder Zur nächsten ÜberschriftZur vorigen Überschrift

Im nachfolgenden Beispiel im Projekt DatenfeldEindimensional werden sieben Werte aus einer Reihe von Temperaturmessungen in einem Feld vom Typ Integer gespeichert und in einem Listenfeld ausgegeben, siehe Abbildung 4.16.

Abbildung 4.16 Eindimensionales Feld

Der Programmcode:

Public Class Form1
    Private Sub Form1_Load(...) Handles MyBase.Load
        Randomize()
    End Sub

    Private Sub cmdAnzeigen1_Click(...) Handles ...
        Dim T(6) As Integer
        Dim i As Integer
        lstFeld.Items.Clear()
        For i = 0 To 6
            T(i) = Rnd() * 10 + 20
            lstFeld.Items.Add(T(i))
        Next i
    End Sub
End Class

Listing 4.12 Projekt »DatenfeldEindimensional«, Feld erzeugen

Zur Erläuterung:

  • Die Werte sollen per Zufallsgenerator ermittelt werden. Daher wird der Zufallsgenerator in der Prozedur Form1_Load() initialisiert.

Anzahl Elemente

  • Mit der Anweisung Dim T(6) As Integer wird ein eindimensionales Feld mit sieben (!) Elementen deklariert. Jedes einzelne Element entspricht einer einzelnen Integer-Variablen.

Startindex

  • Sie können ein Feld nicht mit einem anderen Startindex als 0 erzeugen. Die Deklaration Dim T(10 To 15) As Integer ist daher nicht möglich.

Index

  • Die einzelnen Elemente werden durch eine laufende Nummer, den sogenannten Index, voneinander unterschieden. Der Index beginnt immer bei 0. Das erste Element des Felds hat die Bezeichnung T(0), das nächste T(1) usw. bis T(6).
  • Es können Felder aller bereits genannten Datentypen deklariert werden.
  • Das Listenfeld wird zunächst gelöscht. Dies ist sinnvoll, falls man den Button mehrmals hintereinander betätigt.
  • Innerhalb einer For-Schleife wird jedem Element des Felds ein Wert zugewiesen. Innerhalb der Schleife wird das aktuelle Element mit T(i) angesprochen, da die Schleifenvariable i die Werte von 0 bis 6 durchläuft, die als Index benötigt werden.
  • Der Wert für das Feldelement wird per Zufallsgenerator ermittelt. Dieser liefert Zahlen (mit Nachkommastellen) zwischen 0 und 1. Multipliziert man diese mit 10, so ergeben sich Zahlen zwischen 0 und 10. Addiert man 20 hinzu, erhält man Zahlen zwischen 20 und 30. Da diese Zahlen einer Integer-Variablen zugewiesen werden, werden die Nachkommastellen abgeschnitten und es ergeben sich ganze Zahlen zwischen 20 und 30.
  • Mit der Methode Add() der Eigenschaft Items des Listenfelds werden diese Zahlen einem Listenfeld hinzugefügt, sodass nach dem Ablauf der Ereignisprozedur alle Elemente des Felds im Listenfeld angezeigt werden.

Hinweis: Ein typischer Laufzeitfehler im Zusammenhang mit Feldern ist die Benutzung eines Index, der außerhalb des Feldes liegt. Es folgt dann eine Ausnahme vom Typ IndexOutOfRangeException.


Galileo Computing - Zum Seitenanfang

4.5.2 Ein Feld durchsuchen Zur nächsten ÜberschriftZur vorigen Überschrift

Im folgenden Beispiel geht es um eine typische Operation mit einem Feld: Sie möchten wissen, welches das größte und welches das kleinste Element des Felds ist (Maximum bzw. Minimum). Dies soll mithilfe des nachfolgenden Programms (ebenfalls im Projekt DatenfeldEindimensional) ermittelt werden, siehe Abbildung 4.17.

Abbildung 4.17 Maximum und Minimum

Der zugehörige Code:

Public Class Form1
[...]
    Private Sub cmdAnzeigen2_Click(...) Handles ...
        Dim T(6) As Integer
        Dim MaxWert, MinWert As Integer
        Dim i, MaxWertIndex, MinWertIndex As Integer

        ' Feld füllen
        lstFeld.Items.Clear()
        For i = 0 To 6
            T(i) = Rnd() * 10 + 20
            lstFeld.Items.Add(T(i))
        Next i

        ' Max/Min initialisieren
        MaxWert = T(0)
        MinWert = T(0)
        MaxWertIndex = 0
        MinWertIndex = 0

        ' Max/Min suchen
        For i = 0 To 6
            If T(i) > MaxWert Then
                MaxWert = T(i)
                MaxWertIndex = i
            End If
            If T(i) < MinWert Then
                MinWert = T(i)
                MinWertIndex = i
            End If
        Next i

        ' Max/Min ausgeben
        lblAnzeige.Text = "Max. Wert: " & MaxWert &
            " bei Index " & MaxWertIndex & vbCrLf &
            "Min. Wert: " & MinWert &
            " bei Index " & MinWertIndex
    End Sub
End Class

Listing 4.13 Projekt »DatenfeldEindimensional«, Maximum, Minimum

Zur Erläuterung:

  • Es sind insgesamt vier Variablen vorgesehen, die den größten und den kleinsten Wert sowie deren Feld-Indizes speichern sollen.
  • Nach dem Füllen und Anzeigen des Felds werden die oben angegebenen vier Variablen initialisiert. Es werden die Werte des ersten Feld-Elements als größtes und als kleinstes Element vorbesetzt. Dessen Index (also 0) wird als Index des größten und als Index des kleinsten Elements vorbesetzt.
  • Anschließend wird das restliche Feld (ab Index 1) untersucht. Wenn eines der Elemente größer ist als das bisherige Maximum, dann haben wir ein neues Maximum. Wert und Index des neuen Maximums werden gespeichert. Die analoge Operation wird für das Minimum durchgeführt.
  • Zum Abschluss werden die ermittelten Werte und ihre Indizes ausgegeben.

Galileo Computing - Zum Seitenanfang

4.5.3 Weitere Feld-Operationen Zur nächsten ÜberschriftZur vorigen Überschrift

Klasse Array

Visual Basic stellt für Datenfelder automatisch eine Reihe von Möglichkeiten (über die Klasse Array) zur Verfügung. Diese werden teilweise über den Namen des Felds, teilweise auch über den Klassennamen selber (Array) aufgerufen.

Als Beispiel für die zahlreichen Möglichkeiten soll im nachfolgenden Programm (ebenfalls im Projekt DatenfeldEindimensional) ein Feld geklont werden. Anschließend wird das geklonte Feld sortiert und nach einem bestimmten Wert durchsucht, siehe Abbildung 4.18.

Abbildung 4.18 Wert gesucht und gefunden

Der Programmcode:

Public Class Form1
[...]
    Private Sub cmdAnzeigen3_Click(...) Handles ...
        Dim T(6), U(6) As Integer
        Dim SuchIndex As Integer
        Dim i As Integer

        For i = 0 To 6
            T(i) = Rnd() * 10 + 20
        Next i

        U = T.Clone()
        Array.Sort(U)

        lstFeld.Items.Clear()
        For i = 0 To 6
            lstFeld.Items.Add(U(i))
        Next i

        SuchIndex = Array.IndexOf(U, 25)
        lblAnzeige.Text = "Gesuchter Wert 25" &
            " bei Index: " & SuchIndex
    End Sub
End Class

Listing 4.14 Projekt »DatenfeldEindimensional«, Feld-Operationen

Zur Erläuterung:

  • Es wird ein zweites Feld U mit der gleichen Größe wie das Originalfeld T deklariert.

Clone()

  • Die Methode Clone() dient zum Kopieren eines ganzen Felds. Anschließend stehen im Feld U die gleichen Werte wie im Feld T zur Verfügung.
  • Hinweis: Die einfache Zuweisung U = T dient nicht zum Kopieren des Feldes T. Stattdessen wäre damit nur ein zweiter Verweis auf das Feld T zur Verfügung gestellt worden.

Sort()

  • Die Methode Sort() der Klasse Array wird zur aufsteigenden Sortierung des Felds U genutzt.
  • Die Elemente des sortierten Felds werden ausgegeben.

IndexOf()

  • Die Methode IndexOf() der Klasse Array liefert zu einem Suchwert (25) den ersten Index im Suchfeld U. Dies ist die Position, bei der der gesuchte Wert erstmalig im Feld gefunden wird. Falls der Wert nicht existiert, wird –1 zurückgegeben, siehe Abbildung 4.19.

Abbildung 4.19 Wert gesucht und nicht gefunden


Galileo Computing - Zum Seitenanfang

4.5.4 Mehrdimensionale Datenfelder Zur nächsten ÜberschriftZur vorigen Überschrift

Haben Sie nicht nur sieben Temperaturwerte, die Sie speichern möchten, sondern wurden die Temperaturwerte darüber hinaus an drei verschiedenen Orten aufgenommen, so bietet sich ein zweidimensionales Feld an. Die Elemente eines solchen Feldes werden über zwei Indizes angesprochen. Der erste Index steht für die laufende Nummer der Messung, der zweite Index für den Ort, an dem die Messung durchgeführt wurde.

Das nachfolgende Programm im Projekt DatenfeldMehrdimensional, bei dem die Werte eines Ortes jeweils in einem eigenen Listenfeld angezeigt werden, veranschaulicht dies, siehe Abbildung 4.20.

Abbildung 4.20 Zweidimensionales Feld

Der zugehörige Code:

Public Class Form1
    Private Sub Form1_Load(...) Handles MyBase.Load
        Randomize()
    End Sub

    Private Sub cmdAnzeige_Click(...) Handles ...
        Dim T(6, 2) As Integer
        Dim i, k As Integer

        lstSpalte0.Items.Clear()
        lstSpalte1.Items.Clear()
        lstSpalte2.Items.Clear()

        For i = 0 To 6
            For k = 0 To 2
                T(i, k) = Rnd() * 10 + 20
            Next k
            lstSpalte0.Items.Add(T(i, 0))
            lstSpalte1.Items.Add(T(i, 1))
            lstSpalte2.Items.Add(T(i, 2))
        Next i
    End Sub
End Class

Listing 4.15 Projekt »DatenfeldMehrdimensional«, Feld erzeugen

Zur Erläuterung:

Mehrere Indizes

  • In der Prozedur cmdAnzeige_Click() wird mit Dim T(6, 2) As Integer ein zweidimensionales Feld der Größe 7 x 3 Elemente vom Datentyp Integer deklariert. Der Index beginnt in jeder Dimension bei 0.
  • Die drei Listenfelder werden zunächst gelöscht. Dies ist sinnvoll, wenn man den Button mehrmals hintereinander betätigt.
  • Es folgen zwei geschachtelte For-Schleifen. Geschachtelte Schleifen bestehen aus einer äußeren und einer inneren Schleife. Die äußere Schleife arbeitet hier mit der Schleifenvariablen i, die von 0 bis 6 läuft. Die innere Schleife arbeitet hier mit der Schleifenvariablen k, die von 0 bis 2 läuft.

Geschachtelte Schleife

  • Eine solche geschachtelte Schleife hat folgenden Ablauf: i erhält den Wert 0, k durchläuft dann die Werte 0 bis 2, dann erhält i den Wert 1, und k erhält wieder die Werte von 0 bis 2 usw.
  • Auf diese Weise werden alle 21 Elemente des zweidimensionalen Felds erreicht. Das jeweils aktuelle Element T(i,k) erhält seinen Wert wieder über den Zufallsgenerator.
  • Anschließend werden die drei neuen Werte ihren jeweiligen Listenfeldern mit Items.Add() hinzugefügt.
  • Das Feld wird auf diese Weise vollständig erzeugt und angezeigt.

Wählt der Benutzer eines der Elemente per Mausklick an, so werden dessen Indizes in einem Label angezeigt, siehe Abbildung 4.21.

Abbildung 4.21 Indizes des ausgewählten Elements

Zur Anzeige der Indizes dienen die drei folgenden Prozeduren (ebenfalls im Projekt DatenfeldMehrdimensional):

Public Class Form1
[...]
    Private Sub lstSpalte0_Click(...) Handles ...
        lstSpalte1.SelectedIndex = –1
        lstSpalte2.SelectedIndex = –1
        lblAnzeige.Text = "Indizes: " &
            lstSpalte0.SelectedIndex & ", 0"
    End Sub

    Private Sub lstSpalte1_Click(...) Handles ...
        lstSpalte0.SelectedIndex = –1
        lstSpalte2.SelectedIndex = –1
        lblAnzeige.Text = "Indizes: " &
            lstSpalte1.SelectedIndex & ", 1"
    End Sub

    Private Sub lstSpalte2_Click(...) Handles ...
        lstSpalte0.SelectedIndex = –1
        lstSpalte1.SelectedIndex = –1
        lblAnzeige.Text = "Indizes: " &
            lstSpalte2.SelectedIndex & ", 2"
    End Sub
End Class

Listing 4.16 Projekt »DatenfeldMehrdimensional«, Indizes anzeigen

Zur Erläuterung:

  • Bei einem Mausklick auf ein Element der ersten Liste werden zunächst eventuell vorhandene Markierungen in der zweiten oder dritten Liste entfernt, indem Sie die Eigenschaft SelectedIndex der beiden Listen jeweils auf –1 setzen.
  • Anschließend werden der Index des markierten Elements und der Index des Listenfelds (0, 1 oder 2) im Label angezeigt.

Weitere Möglichkeiten:

  • Wie bereits erwähnt, können ein- oder mehrdimensionale Felder beliebiger Datentypen deklariert werden.

Dreidimensional

  • Haben Sie nicht nur sieben Messungen an drei Orten, sondern auch noch Messungen an z. B. 31 Tagen, so benötigen Sie eine dritte Dimension. Die Deklaration sähe dann wie folgt aus: Dim T(6, 2, 30) As Integer. Es ergeben sich also 7 x 3 x 31 Elemente.

Vierdimensional

  • Dieses Beispiel lässt sich leicht erweitern: Wie bisher haben wir sieben Messungen an drei Orten an 31 Tagen. Es wird aber jeweils nicht nur die Temperatur, sondern auch die Windrichtung, die Windgeschwindigkeit und die Luftfeuchtigkeit gemessen. Dazu benötigen Sie ein vierdimensionales Feld, das wie folgt deklariert wird: Dim T(6, 2, 30, 3) As Integer (oder besser: As Single).
  • Sie sehen, dass Datenfelder nahezu unbegrenzte Möglichkeiten zur Speicherung und Verarbeitung größerer Datenmengen bieten. Der Begriff Speicherung ist hier natürlich nur bedingt, nämlich für die Speicherung während der Verarbeitung zu verstehen. Für eine dauerhafte Speicherung auf Festplatte benötigen Sie Dateien (siehe Abschnitt 6.3) oder besser noch Datenbanken (siehe Kapitel 8).

Übung

Übung ÜDatenfeldEindimensional

Schreiben Sie ein Programm, in dem den Elementen eines eindimensionalen Feldes, das 10 Integer-Werte beinhaltet, zufällige Werte zugewiesen werden. Anschließend sollen alle Positionen des kleinsten Feldelements ermittelt und ausgegeben werden, wie in Abbildung 4.22.

Abbildung 4.22 Übung ÜDatenfeldEindimensional

Übung

Übung ÜDatenfeldMehrdimensional

Schreiben Sie ein Programm, in dem den Elementen eines dreidimensionalen Feldes, das 6 × 3 × 4 Integer-Werte beinhaltet, zufällige Werte zugewiesen werden. Anschließend sollen alle Positionen des kleinsten Elements des Feldes ermittelt und ausgegeben werden, wie in Abbildung 4.23.

Abbildung 4.23 Übung ÜDatenfeldMehrdimensional


Galileo Computing - Zum Seitenanfang

4.5.5 Datenfelder initialisieren Zur nächsten ÜberschriftZur vorigen Überschrift

Geschweifte Klammern

Datenfelder können auch direkt bei ihrer Erzeugung mit Werten besetzt werden. Statt der Größe der einzelnen Dimensionen gibt man die Elemente an. Für jede Dimension wird dabei ein Paar geschweifter Klammern { und } benötigt. Siehe hierzu das folgende Beispiel (ebenfalls im Projekt DatenfeldMehrdimensional):

Public Class Form1
[...]
    Private Sub cmdInit_Click(...) Handles ...
        Dim T() As Integer = {0, 5, –2, 7}

        Dim U(,) As Integer =
            {{6, 2, 8}, {9, 6, –3}}
        Dim V(,,) As Integer =
            {{{9, –3, 2}, {2, 1, –5}},
             {{3, 9, 8}, {6, 3, –8}}}

        lblAnzeige.Text = U(1, 2) & ", " & V(1, 1, 2)
    End Sub
End Class

Listing 4.17 Projekt »DatenfeldMehrdimensional«, Initialisierung

Zur Erläuterung:

  • Das Feld T ist eindimensional und hat vier Elemente. Die einzelnen Elemente werden durch Kommata voneinander getrennt. Das gesamte Feld steht innerhalb eines Paares geschweifter Klammern. Das erste Element hat den Index 0 usw.
  • Das Feld U ist zweidimensional und hat 2 Zeilen × 3 Spalten mit insgesamt 6 Elementen. Die Elemente einer Zeile stehen in geschweiften Klammern. Die beiden Zeilen des Feldes sind durch ein Komma voneinander getrennt. Das gesamte Feld steht wiederum in geschweiften Klammern. Angezeigt wird der letzte Wert der letzten Zeile: –3.
  • Das Feld V ist dreidimensional und hat 2 Ebenen × 2 Zeilen × 3 Spalten mit insgesamt 12 Elementen. Pro Dimension kommen weitere Paare geschweifter Klammern hinzu. Mit der Anzahl an Dimensionen wird die Zuordnung der Werte zu den Feldelementen auf diese Weise zunehmend schwieriger. Empfehlenswert ist daher eher die explizite Zuordnung durch einzelne Zuweisungen. Angezeigt wird der letzte Wert der letzten Zeile der letzten Ebene: –8.

Galileo Computing - Zum Seitenanfang

4.5.6 Datenfelder sind dynamisch Zur nächsten ÜberschriftZur vorigen Überschrift

Steht zum Zeitpunkt des Programmstarts noch nicht fest, wie viele Variablen in einem Feld gespeichert werden sollen, können Sie auch dafür sorgen, dass sich die Größe zur Laufzeit verändern lässt.

ReDim, Preserve

Die Größenveränderung (Redimensionierung, Schlüsselwort ReDim) kann mehrmals geschehen. Mithilfe von Preserve vereinbaren Sie, dass die bereits vorhandenen Werte erhalten bleiben sollen.

Im folgenden Beispiel wird ein Feld mit klassenweiter Gültigkeit deklariert und ausgegeben, siehe Abbildung 4.24. Seine gewünschte Größe kann anschließend vom Benutzer mit (siehe Abbildung 4.25) oder ohne (siehe Abbildung 4.26) Preserve geändert werden (Projekt DatenfeldDynamisch).

Abbildung 4.24 Feld in ursprünglicher Größe

Abbildung 4.25 Vergrößerung auf zehn Elemente, mit Preserve

Abbildung 4.26 Vergrößerung auf zehn Elemente, ohne Preserve

Der Programmcode:

Public Class Form1
    Dim T(6) As Integer

    Private Sub Form1_Load(...) Handles MyBase.Load
        Randomize()
    End Sub

    Private Sub cmdOriginal_Click(...) Handles ...
        Dim i As Integer
        lstFeld.Items.Clear()
        For i = 0 To 6
            T(i) = Rnd() * 10 + 20
            lstFeld.Items.Add(T(i))
        Next i
    End Sub

    Private Sub cmdNeu_Click(...) Handles ...
        If optMitPreserve.Checked Then
            ReDim Preserve T(numGröße.Value – 1)
        Else
            ReDim T(numGröße.Value – 1)
        End If
        lstFeld.Items.Clear()
        For i = 0 To T.GetUpperBound(0)
            lstFeld.Items.Add(T(i))
        Next i
    End Sub
End Class

Listing 4.18 Projekt »DatenfeldDynamisch«

Zur Erläuterung:

  • Das Feld T wird zunächst original klassenweit gültig mit sieben Elementen deklariert, damit es in allen Prozeduren zur Verfügung steht.
  • Die aktuelle Anzahl der Elemente wird im Zahlenauswahlfeld angezeigt. Dieses Feld ist hier auf die Eigenschaftswerte Minimum = 1 bzw. Maximum = 30 begrenzt. Ein Feld mit weniger als einem Element ergibt keinen Sinn.
  • In der Prozedur cmdOriginal_Click() wird das Feld gefüllt und ausgegeben.
  • In der Prozedur cmdNeu_Click() wird zunächst geprüft, ob die Größenänderung mit Preserve oder ohne Preserve erfolgen soll.

ReDim

  • Hat der Benutzer mit Preserve gewählt, so wird der eingestellte Wert des Zahlenauswahlfelds (Eigenschaft Value) ermittelt. Das Feld T wird in der gewünschten Größe mit der Anweisung ReDim Preserve T(numGröße.Value1) geändert und neu angezeigt.

GetUpperBound()

  • Zur Anzeige wird wiederum eine Schleife verwendet. Diese Schleife läuft von 0 bis T.GetUpperBound(0). Die Methode GetUpperBound() ermittelt den größten Index eines Feldes für die angegebene Dimension. Bei einem eindimensionalen Feld gibt es ausschließlich die Dimension 0. Da die Feldgröße durch den Benutzer eingestellt wurde, ist sie zur Entwicklungszeit unbekannt und muss auf diese Weise ermittelt werden.
  • Wurde das Feld vergrößert, so werden die bereits vorhandenen Werte, ergänzt um die Werte der neuen Elemente, angezeigt. Den neuen Elementen wurde noch kein Wert zugewiesen, daher haben sie den Wert 0.
  • Wenn das Feld verkleinert wurde, dann werden nur noch die Werte der verbliebenen Elemente angezeigt. Die restlichen Elemente wurden gelöscht.
  • Wenn der Benutzer ohne Preserve gewählt hat, dann wird das Feld ebenfalls in seiner neuen Größe angezeigt. Alle Elemente haben den Wert 0, die Originalwerte sind verloren.

Galileo Computing - Zum Seitenanfang

4.5.7 Collections initialisieren Zur nächsten ÜberschriftZur vorigen Überschrift

Oberbegriff

Collections ist ein Oberbegriff für Datenstrukturen, die mehrere Variablen bzw. Objekte umfassen. Die in den vorherigen Abschnitten behandelten Datenfelder gehören ebenfalls zu den Collections. Mit Visual Basic 2010 wird eine vereinfachte Vorgehensweise zur Initialisierung von Collections eingeführt.

Dies soll im Projekt CollectionInitialisierer mithilfe einiger Datenfelder erläutert werden. Es ist nun möglich, sowohl die Größe als auch den Datentyp der Datenstruktur implizit, also mithilfe der gelieferten Werte, festzulegen.

Public Class Form1
    Private Sub cmdAnzeige_Click(...) Handles ...
        Dim It = {3, 4, 5}
        Dim Db = {3.2, 4, 5.8}
        Dim St = {"Bern", "Genf", "Lausanne"}
        Dim Gem = {5, 6.2, "Basel"}
        Dim ZweiDim = {{3, 4, 5}, {8, 7, 6}}
        Dim i, j As Integer

        lblA.Text = ""
        For i = 0 To It.Count – 1
            lblA.Text &= "It(" & i & "): " &
                It(i) & vbCrLf
        Next

        For i = 0 To Db.Count – 1
            lblA.Text &= "Db(" & i & "): " &
                Db(i) & vbCrLf
        Next

        For i = 0 To St.Count – 1
            lblA.Text &= "St(" & i & "): " &
                St(i) & vbCrLf
        Next

        For i = 0 To Gem.Count – 1
            lblA.Text &= "Gem(" & i & "): " &
                Gem(i) & vbCrLf
        Next

        For i = 0 To ZweiDim.GetUpperBound(0)
            For j = 0 To ZweiDim.GetUpperBound(1)
                lblA.Text &=
                    "ZweiDim(" & i & "," & j & "): " &
                    ZweiDim(i, j) & vbCrLf
            Next j
        Next i
    End Sub
End Class

Listing 4.19 Projekt »CollectionInitialisierer«

Zur Erläuterung:

Datentyp erkannt

  • Das Datenfeld It hat drei Elemente und wird als Feld vom Datentyp Integer erkannt, da innerhalb der geschweiften Klammern nur ganze Zahlen stehen.
  • Das Datenfeld Db wird als Feld vom Datentyp Double erkannt, da innerhalb der geschweiften Klammern nur Zahlen stehen, davon mindestens eine Zahl mit Nachkommastellen.
  • Das Datenfeld St wird als Feld vom Datentyp String erkannt, da innerhalb der geschweiften Klammern mindestens eine Zahl mit Nachkommastellen steht.
  • Das Datenfeld Gem wird als Feld vom Datentyp Object erkannt. Dies ist der Datentyp, der allen Datentypen zugrunde liegt. Da sowohl Zahlen als auch Zeichenketten innerhalb der geschweiften Klammern stehen, wird dieser Datentyp gewählt.
  • Mit einem Datenfeld vom Typ Object ist es also möglich, Daten unterschiedlichen Typs in einem Feld zu vereinigen. Allerdings wird die Verarbeitung der Daten erschwert, da die jeweiligen datentyp-spezifischen Operationen nur über einen Umweg bereit stehen.
  • Mehrdimensionale Felder sind ebenfalls möglich, wie das Feld ZweiDim zeigt. Die Initialisierung des zweidimensionalen Datenfeldes vom Typ Integer gelingt mit geschachtelten, geschweiften Klammern, ähnlich wie in Abschnitt 4.5.5 gezeigt.

Die Ausgabe wird in Abbildung 4.27 gezeigt.

Abbildung 4.27 Collections initialisieren


Galileo Computing - Zum Seitenanfang

4.5.8 For-Each-Schleife topZur vorigen Überschrift

Im Zusammenhang mit Collections können Sie auch die For...Each-Schleife anwenden. Ein Beispiel, ebenfalls im Projekt CollectionInitialisierer:

Public Class Form1
[...]
    Private Sub cmdAnzeige2_Click(...) Handles ...
        Dim Db = {3.2, 4, 5.8}
        Dim DbZahl As Double

        lblA.Text = ""
        For Each DbZahl In Db
            lblA.Text &= "DbZahl: " & DbZahl
            DbZahl = DbZahl + 10
            lblA.Text &= ", verändert: " & DbZahl & vbCrLf
        Next

        For i = 0 To Db.Count – 1
            lblA.Text &= "Db(" & i & "): " &
                Db(i) & vbCrLf
        Next
    End Sub
End Class

Listing 4.20 Projekt »CollectionInitialisierer«, For-Each-Schleife

Zur Erläuterung:

For-Each

  • Bei der Ausgabe wird als Alternative diesmal die For-Each-Schleife verwendet. Ein einzelnes Element der Collection Db wird in die Variable DbZahl kopiert. Diese wird anschließend ausgegeben.

Kopie

  • Sie können in Abbildung 4.28 erkennen, dass es eine Kopie ist, denn eine Veränderung der Variablen DbZahl hat keine Veränderung des entsprechenden Elements aus der Collection Db zur Folge.

Abbildung 4.28 For-Each-Schleife



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






<< zurück
  Zum Katalog
Zum Katalog: Einstieg in Visual Basic 2010

Einstieg in Visual Basic 2010
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Visual Basic 2010






 Visual Basic 2010


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Silverlight 4






 Silverlight 4


Zum Katalog: Einstieg in Visual C# 2010






 Einstieg in
 Visual C# 2010


Zum Katalog: Visual C# 2010






 Visual C# 2010


Zum Katalog: Einstieg in PHP 5.3 und MySQL 5.4






 Einstieg in PHP 5.3
 und MySQL 5.4


Zum Katalog: PHP 5.3 und MySQL 5.4






 PHP 5.3 und
 MySQL 5.4


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2010
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de