Rheinwerk Computing < openbook > Rheinwerk 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
12 Windows Presentation Foundation
13 Windows Store-Apps für Windows 8
A Installation und technische Hinweise
B Lösungen der Übungsaufgaben
C Inhalt der Buch-DVD
D Der Autor
Stichwort

Jetzt Buch bestellen
Ihre Meinung?

Spacer
Einstieg in Visual Basic 2012 von Thomas Theis
Ideal für Programmiereinsteiger geeignet
Buch: Einstieg in Visual Basic 2012

Einstieg in Visual Basic 2012
Rheinwerk Computing
579 S., 3., aktualisierte und erweiterte Auflage 2013, brosch., mit DVD
24,90 Euro, ISBN 978-3-8362-1959-4
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

Rheinwerk Computing - Zum Seitenanfang

4.5 DatenfelderZur nächsten Ü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.


Rheinwerk Computing - Zum Seitenanfang

4.5.1 Eindimensionale DatenfelderZur 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

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


Rheinwerk Computing - Zum Seitenanfang

4.5.2 Ein Feld durchsuchenZur 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

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.

Rheinwerk Computing - Zum Seitenanfang

4.5.3 Weitere Feld-OperationenZur nächsten ÜberschriftZur vorigen Überschrift

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

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.
  • 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.
  • Die Methode Sort() der Klasse Array wird zur aufsteigenden Sortierung des Felds U genutzt.
  • Die Elemente des sortierten Felds werden ausgegeben.
  • 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

Abbildung 4.19 Wert gesucht und nicht gefunden


Rheinwerk Computing - Zum Seitenanfang

4.5.4 Mehrdimensionale DatenfelderZur 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

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:

  • 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.
  • 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

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.
  • 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.
  • 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, »Datenbank-Anwendungen mit ADO.NET«).

Übung

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

Abbildung 4.22 Übung ÜDatenfeldEindimensional

Übung

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

Abbildung 4.23 Übung ÜDatenfeldMehrdimensional


Rheinwerk Computing - Zum Seitenanfang

4.5.5 Datenfelder initialisierenZur nächsten ÜberschriftZur vorigen Überschrift

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 { } 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.

Rheinwerk Computing - Zum Seitenanfang

4.5.6 Datenfelder sind dynamischZur 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.

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

Abbildung 4.24 Feld in ursprünglicher Größe

Abbildung

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

Abbildung

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.
  • 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.
  • 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.

Rheinwerk Computing - Zum Seitenanfang

4.5.7 Collections initialisierenZur nächsten ÜberschriftZur vorigen Überschrift

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 wurde 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:

  • 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

Abbildung 4.27 Collections initialisieren


Rheinwerk Computing - Zum Seitenanfang

4.5.8 For-Each-SchleifeZur 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:

  • 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.
  • 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

Abbildung 4.28 For-Each-Schleife



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Einstieg in Visual Basic 2012

Einstieg in Visual Basic 2012
Jetzt Buch bestellen


 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Rheinwerk-Shop: Visual Basic 2012






 Visual Basic 2012


Zum Rheinwerk-Shop: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Rheinwerk-Shop: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Rheinwerk-Shop: Java ist auch eine Insel






 Java ist auch
 eine Insel


Zum Rheinwerk-Shop: Einstieg in Python






 Einstieg in Python


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2013
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.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern