Foliensatz 'Einf. Programmierung: VB.NET'

Download Report

Transcript Foliensatz 'Einf. Programmierung: VB.NET'

Einführung in die
Programmierung mit
Visual Basic.NET
Dipl.-Kfm. Lars Burmester
WS 2006/2007
Einführung in die Programmierung mit VB.NET
Literatur
• Kofler, Michael:
Visual Basic.NET,
Addison-Wesley, München, Boston u.a. 2002 (~50 €)
• Monadjemi, Peter:
Jetzt lerne ich Visual Basic .NET,
Markt & Technik, München 2004 (25 €)
• Martin, René:
Einstieg in VB.NET,
Galileo Computing, 2002 (20 €)
• Craig, John Clark; Webb, Jeff:
Visual Basic 5.0 - Entwickler-Workshop,
Microsoft Press, Redmond, Washington 1997 (85 DM)
Einführung in die Programmierung mit VB.NET
1
Programmiersprachen
• Erzeugung von Code, den der Computer
ausführen kann
• 2 wesentliche Unterscheidungsmerkmale für
Programmiersprachen:
– Art der Symbolik (Syntax)
– Art der Code-Erzeugung (Compiler vs. Interpreter)
Einführung in die Programmierung mit VB.NET
2
Art der Symbolik
- Grad der Abstraktion vom Maschinencode Maschinennahe Sprachen
Höhere Programmiersprachen
• rechnerspezifisch
• kompakt und schnell
• z. B. Assembler
•
•
•
•
•
Einführung in die Programmierung mit VB.NET
rechnerunabhängig
umfangreichere Befehle
leichter erlernbar
langsamer und größer
z.B. Cobol
3
Art der Code-Erzeugung
Compiler-Sprachen
Interpreter-Sprachen
• das in der Programmiersprache verfasste Programm
(Quellprogramm) wird
komplett in Maschinensprache übersetzt und kann
als solches gespeichert
(Objektprogramm) und
anschließend ausgeführt
werden
• EXE- bzw. BAT-Datei
• z.B. Pascal
• Programm wird Zeile für Zeile
abgearbeitet, d.h.
Anweisungen werden geprüft
und unmittelbar ausgeführt
• kein Objektprogramm
• Entwicklungsumgebung bzw.
Engine zum Ausführen des
Programms notwendig
• langsamer
• z.B. BASIC, Small-Talk,
PHP, ASP, Javascript
Mischformen
• kombinierter Einsatz von Compiler
und Interpreter
• z.B. Java
Einführung in die Programmierung mit VB.NET
4
Programmausführungsmodell von .NET
C#
VB
C++
Java
Language compilers
MSIL code
(plus metadata)
Loader
JIT + verifier
Managed
code
Execution
Einführung in die Programmierung mit VB.NET
Unjitted
routine
call
MSIL: Microsoft Intermediate Language
JIT:
Judiciously Incremental Translation
Historie der Programmiersprachen
Jahr
VB.NET
C#
2000
PHP
ASP
Java
V. Basic
1990
Perl
C++
1980
ADA
Modula2
C
1970
Smalltalk
Pascal
Prolog
Algol 68
Simula
1960
PL/1
Basic
Algol 60
APL
Lisp
Cobol
Fortran
Einführung in die Programmierung mit VB.NET
6
Prozedurales vs. objektorientiertes Programmieren
Methode
Daten
Funktion
Methode
Funktion
Funktion
Methode
Daten
Methode
Funktion
Funktion
Methode
Daten
Methode
Methode
Daten
Daten
Methode
Prozedurales Programmieren
Einführung in die Programmierung mit VB.NET
Objektorientiertes Programmieren
7
Entwicklungsumgebung "VisualStudio.NET"
• Hauptfenster
• ProjektmappenExplorer
• Toolbox
• Formularfenster
• Eigenschaftsfenster
• Codefenster
Einführung in die Programmierung mit VB.NET
8
Beispielprogramm „Hello World!“
• Neues Projekt
• Steuerelemente
einfügen
• Eigenschaften
festlegen
• Programmcode
erstellen
• Programm speichern
Einführung in die Programmierung mit VB.NET
9
Variablen
... sind Platzhalter für Zahlen, Text oder andere Daten. Variablen werden
dazu verwendet, Daten während des Programmablaufs vorübergehend
zu speichern und Berechnungen mit ihnen auszuführen.
Deklaration:
– Option Explicit On
Variablen müssen vor ihrer ersten Verwendung mit Dim deklariert werden,
z.B. Dim intZahl1
– Option Strict On
Variablen müssen mit expliziter Typangabe deklariert werden,
z.B. Dim intZahl1 As Integer
– Initialisierung (erste Wertzuweisung) bei Deklaration möglich,
z.B. Dim intZahl1 As Integer = 1
Konstanten:
– werden mit Const definiert,
z.B. Const Pi As Double = 3.14159265
Vgl. Kofler, VB.NET, S. 116ff.
Einführung in die Programmierung mit VB.NET
10
Datentypen in VB.NET
Datentyp
Suffix
Byte
Wertebereich
Boolean
Byte
Short
Integer
Long
%
&
2
1
2
4
8
True oder False
ganze Zahlen: 0 ... 255
ganze Zahlen: -32.768 ... +32.767
ganze Zahlen: -2.147.483.648 und 2.147.483.647
ganze Zahlen: -263 ... 263-1
Single
Double
Decimal
!
#
@
4
8
16
Fließkommazahlen mit einfacher Genauigkeit
Fließkommazahlen mit doppelter Genauigkeit
Festkommazahlen mit 28 Stellen Genauigkeit
$
2
10+2*n
ein Unicode-Zeichen
Zeichenketten
Date
8
Datumsangaben
Object
4+n
Defaultdatentyp, selbst anpassend
Char
String
Beispiele für Suffix-Verwendung:
Dim i% statt Dim i As Integer
Dim Name$ statt Dim Name As String
Vgl. Kofler, VB.NET, S. 116ff.
Einführung in die Programmierung mit VB.NET
11
Konvertierungsfunktionen
Daten bzw. Variablen müssen häufig in verschiedene Datentypen
umgewandelt werden.
Beispiel:
Berechnungen kann man nur mit numerischen Datentypen
durchführen. Um mit einer Zeichenkette (z.B. Benutzereingabe in einem Textfeld) rechnen zu können, muss diese zunächst in einen numerischen Datentyp (z.B. Integer, Double)
umgewandelt werden.
Für explizite Typkonvertierungen sieht VB.NET die Funktionen
CBool, CByte, CChar, CDate, CDbl, CDec, CInt, CLng, CObj,
CShort, CSng und CStr vor.
Beispiel für die Konvertierung eines Strings in eine Integerzahl:
intZahl = CInt (txtEingabe.Text)
Vgl. Kofler, VB.NET, S. 334ff.
Einführung in die Programmierung mit VB.NET
12
Formatierungsmethoden
Zum Formatieren von Variablen steht die Methode ToString zur Verfügung, die auf alle elementaren Datentypen und Objekte angewandt
werden kann.
Allgemeine Form:
String = Variable.ToString("Formatcode")
Vordefinierte Formatcodes:
Code
Bedeutung
c
f
f3
n
p
curreny
fixed-point
number
percent
Beispiel
Währungsformat
Festkommaformat
Festkommaformat mit 3 Nachkommastellen
Format mit Tausendertrennung
Prozentzahlen (Achtung: 1 = 100%)
123.456.789,00 €
123456789,00
123456789,000
123.456.789,00
0.256  25,60%
Beispiel:
Dim dblWert As Double = 20999.9
txtAusgabe.Text = dblWert.ToString("c")
Vgl. Kofler, VB.NET, S. 339ff.
Einführung in die Programmierung mit VB.NET
13
Operatoren in VB.NET (I)
arithmetische Operatoren:
=
+
*
/
\
Mod
^
: einfacher Zuweisungsoperator
: Addition
Beispiele:
: Subtraktion
int3 = int1 + int2
: Multiplikation
x = (r / s) - (d * r) + v^3
: Division
: Ganzzahldivision
: Restwertdivision (Modulo-Operation)
: Potenz (Hochzahl)
Verknüpfung von Zeichenketten:
+
&
: verknüpft Zeichenketten
: verknüpft beliebige Datentypen,
sofern diese in Zeichenketten umgewandelt werden können
Beispiele:
str1 = "ab" + "bc"
str2 = "12" & 3
Vgl. Kofler, VB.NET, S. 181ff.
Einführung in die Programmierung mit VB.NET
14
Operatoren in VB.NET (II)
Vergleichsoperatoren:
>
>=
<
<=
=
<>
Like
: größer als
: größer als oder gleich
: kleiner als
: kleiner als oder gleich
: gleich
: ungleich
: Mustervergleich für Zeichenketten
logische Operatoren:
Not
And
Or
Xor
Beispiele:
intZahl1 < intZahl2
x <> y
(s >= 5) And (x = y)
: Negation
: UND-Verknüpfung (auch: AndAlso)
: ODER-Verknüpfung (auch: OrElse)
: exklusives Oder
Einführung in die Programmierung mit VB.NET
15
Operatoren in VB.NET (III)
VB.NET kennt die von C oder Java bekannten Zuweisungsoperatoren
wie +=, -= etc.
Damit ist a += 1 also eine Kurzschreibweise für a = a + 1.
Zuweisungsoperatoren:
+=
-=
*=
/=
+= &=
: erhöht bzw. erniedrigt eine Variable um den angegebenen Wert
: multipliziert bzw. dividiert eine Variable um den
angegebenen Wert
: fügt einer Zeichenkette eine andere Zeichenkette hinzu
Einführung in die Programmierung mit VB.NET
16
Exkurs: Richtlinien für guten Programmierstil
• Elemente (Variablen, Forms, Steuerelemente u.a.) aussagekräftig
benennen
– Präfixe verwenden
• Verwendung von Option Explicit On oder besser Option Strict On
• Variablen und Parameter mit geeigneten Datentypen versehen
• immer kleinstmöglichen Gültigkeitsbereich für Variablen und
Prozeduren verwenden
• Inline-Dokumentation
– Zweck der Prozedur
– Vor Schleifen: Was wird verarbeitet? Ausstiegsbedingung?
– ...
Vgl. Craig/Webb, Workshop, S. 41ff.
Einführung in die Programmierung mit VB.NET
17
Präfixe für die Benennung von Steuerelementen
•
•
•
•
•
•
•
•
•
•
•
•
Button
CheckBox
ComboBox
Database
Form
Label
ListBox
Menu
PictureBox
RadioButton
TextBox
Timer
Befehlsschaltfläche
Kontrollkästchen
Kombinationsfeld
(ODBC-)Datenbank
Formular
Bezeichnungsfeld
Listenfeld
Menü
Bildfeld
Optionsfelder
Textfeld
Zeitgeber
but
chk
cbo
db
frm
lbl
lst
mnu
pic
rad
txt
tmr
Vgl. Craig/Webb, Workshop, S. 42f.
(angepasst an neue Steuerelemente von VB.NET)
Einführung in die Programmierung mit VB.NET
18
Aufgabe 1)
Erstellen Sie ein Programm, mit dessen Hilfe Sie in der Lage sind, den Endwert
einer Kapitalanlage zu berechnen, wobei
Endwert  Anfangswert *(1  Zins)Dauer
>>>> Anlage
Einführung in die Programmierung mit VB.NET
19
Verwendung der .NET-Bibliotheken
VB.NET beinhaltet bereits von Hause aus eine Vielzahl an Funktionen und
Leistungsmerkmalen, die in der sogenannten .NET-Klassenbibliothek bereitgestellt werden. In VB.NET-Programmen können Sie nur die Klassen, Strukturen und Methoden solcher Bibliotheken nutzen, auf die Sie in Ihrem Programm verweisen.
Der Zugriff auf die Klassen erfolgt in der Schreibweise
System.Klasse.Subklasse (z.B. System.Windows.Forms.Button).
Damit bei der Nutzung von Klassen nicht jedes Mal der gesamte Klassenname
angegeben werden muss, kann mit dem Schlüsselwort Imports am Beginn
einer Codedatei ein Verweis auf sog. Namensräume eingerichtet werden. Ein
Namensraum fasst mehrere Klassen, die inhaltlich zusammengehören, zu
einer Gruppe zusammen (z.B. System.Windows.Forms).
Ein Imports-Verweis bewirkt, dass der Compiler bei der Auflösung von
Klassennamen automatisch die entsprechenden Namensräume durchsucht.
Vgl. Kofler, VB.NET, S. 193ff.
Einführung in die Programmierung mit VB.NET
20
Arithmetische Funktionen
Arithmetische Funktionen sind Teil der System.Math-Klasse.
Der Zugriff auf diese Funktionen erfolgt demnach in der Schreibweise:
System.Math.Funktion(Parameter)
Beispiel:
dblVar = System.Math.Sqrt(64)
'Ermittelt die Quadratwurzel der Zahl 64
Wenn Sie häufig arithmetische Funktionen einsetzen, sollten Sie die
Anweisung Imports System.Math verwenden:
Imports System.Math
...
dblVar = Sqrt(64)
'am Beginn des Codes
Wichtige Math-Funktionen:
Abs(x), Cos(x), Sin(x), Tan(x), Log(x), Log10(x), Sqrt(x), ...
Anmerkung: Alle Math-Funktionen erwarten Double-Parameter und liefern DoubleErgebnisse!
Vgl. Kofler, VB.NET, S. 293f.
Einführung in die Programmierung mit VB.NET
21
Aufgabe 2)
Erstellen Sie ein Programm, mit dessen Hilfe die optimale Bestellmenge
berechnet werden kann. Die Formel dazu lautet:
optimale Bestellmenge 
bestellfixe Kosten * Jahresbedarf * 2
Pr eis *( Zins  Lagerkosten )
>>>> Bestellmenge
Einführung in die Programmierung mit VB.NET
22
Die IF-THEN-ELSE-Anweisung
Allgemeine Form:
Ablauf:
If Ausdruck Then
Anweisung 1
... Ausdruck Then
ElseIf
Anweisung
Else
Anweisung 2
End If
Beispiel:
If i=10 Then
txtAusgabe.Text = "i ist gleich 10"
Else
txtAusgabe.Text = "i ist ungleich 10"
End If
Vgl. Kofler, VB.NET, S. 162
Einführung in die Programmierung mit VB.NET
23
Aufgabe 3)
Schreiben Sie ein Programm, das bei Eingabe des zu versteuernden Einkommens die Einkommensteuer berechnet (siehe § 32a EStG).
Es gilt:
x <= 7235
T=0
7236 <= x <= 9251
T = (768,85*y +1990)*y, mit y=(x-7200)/10000
9252 <= x <= 55007
T = (278,65*z+2300)*z, mit z=(x-9216)/10000
55008 <= x
T = 0,485*x - 9872
wobei x = zu versteuerndes Einkommen und T = Einkommensteuer
>>>> Steuer
Einführung in die Programmierung mit VB.NET
24
Die FOR-NEXT-Schleife
Ablauf:
Allgemeine Form:
For Zähler=Start To Ende [Step Schrittweite]
Anweisungsblock
Next [Zähler]
Beispiel:
For i=1 To 10
txtAusgabe.Text = "i = " & i.ToString
x=x*i
Next i
Zähler=Start
Zähler>Ende
Falsch
Wahr
Anweisungen
next Zähler
(gemäß step)
nächste
Anweisung
Vgl. Kofler, VB.NET, S. 165f.
Einführung in die Programmierung mit VB.NET
*) Das ‚>‘-Zeichen gilt nur für einen positiven Step. Bei
negativem Step gilt analog ein ‚<‘-Zeichen.
25
Aufgabe 4)
Schreiben Sie ein Programm, mit dessen Hilfe die geometrische Reihe
1 1
1
gn  1    ...  n 1
2 4
2
für ein beliebiges n berechnet werden kann.
>>>> Reihe
Einführung in die Programmierung mit VB.NET
26
Die ListBox (I)
Das Steuerelement ListBox bietet die Möglichkeit, Listen darzustellen und ein
Element bzw. mehrere Elemente aus diesen auszuwählen.
Hinzufügen von Elementen in die ListBox:
ListBox.Items.Add (Objekt)
: fügt der Liste ListBox ein Element als neue Zeile hinzu
ListBox.Items.Insert (Index, Objekt) : fügt der Liste ListBox ein Element an der Stelle Index
hinzu
Zugriff auf Element aus der ListBox:
ListBox.Items (Index)
: liefert das Element mit der angegebenen Indexnummer aus der Liste ListBox
Listenauswahl auswerten (nur bei Einfachauswahl!):
ListBox.SelectedItem
: verweist auf das ausgewählte Element
(Nothing, wenn nichts ausgewählt)
ListBox.SelectedIndex
: gibt die Indexnummer des ausgewählten Elementes
an (-1, wenn nichts ausgewählt)
ListBox.Text
: enthält die Zeichenkette des ausgewählten Elementes
Einführung in die Programmierung mit VB.NET
27
Die ListBox (II)
Entfernen von Elementen aus der ListBox:
ListBox.Items.Remove (Objekt)
: entfernt ein spezifiziertes Element aus der Liste
ListBox;
Beispiel:
ListBox.Items.Remove (ListBox.SelectedItem)
' entfernt das ausgewählte Element aus der Liste
' ListBox
ListBox.Items.RemoveAt (Index)
: entfernt das Element mit der angegebenen Indexnummer aus der Liste ListBox;
Beispiel:
ListBox.Items.RemoveAt (ListBox.SelectedIndex)
' entfernt das ausgewählte Element aus der Liste
' ListBox
ListBox.Items.Clear
: löscht den Inhalt der gesamten Liste ListBox
Anzahl der Elemente in einer ListBox:
ListBox.Items.Count
: liefert die Anzahl der Elemente der Liste ListBox;
Index des letzten Elements: ListBox.Items.Count-1
Anmerkung: Der Index einer ListBox fängt mit Null an!
Einführung in die Programmierung mit VB.NET
Vgl. Kofler, VB.NET, S. 612ff.
28
Aufgabe 5)
Erstellen Sie ein Programm, welches für die Zahlen 1 bis 5 das Einmaleins ausgibt; d.h. 1*1, 1*2, ..., 5*5. Schreiben Sie das Ergebnis in eine Liste.
>>>> Einmaleins
Einführung in die Programmierung mit VB.NET
29
Die DO-LOOP-Schleifen
Ablauf:
Allgemeine Form:
Do
Anweisungsblock
Loop [{While | Until} Ausdruck]
Beispiel:
Do
x=i*10
i=i+1
Loop While i<>20
Anmerkung:
Auch hinter Do können Bedingungen mit den
Schlüsselwörtern While oder Until angegeben
werden.
Einführung in die Programmierung mit VB.NET
Vgl. Kofler, VB.NET, S. 166f.
30
Aufgabe 6)
Erstellen Sie ein Programm, welches den Verlauf eines Kredites zeigt. Abgefragt
werden soll die Kreditsumme, der Tilgungsbetrag und der Zinssatz (p.a. und in
Prozent). Die Tilgung soll monatlich erfolgen. In jedem Monat fallen somit eine
Tilgungsrate und eine Zinszahlung in Höhe auf die noch vor der Tilgung vorhandene Restkreditsumme an. Der Kredit ist dann abgelaufen, wenn keine Restkreditsumme mehr vorhanden ist. Ausgegeben werden soll für jede Periode die Nummer des Monats, der Tilgungsbetrag, die geleistete Zinszahlung und der verbleibende Restkreditbetrag. Verwenden Sie dazu auch eine Liste.
>>>> Kredit
Einführung in die Programmierung mit VB.NET
31
Felder in VB.NET (I)
Ein Feld ist eine Zusammenfassung mehrerer Variablen gleichen Datentyps unter einer Bezeichnung. Der Zugriff zu den Feldelementen erfolgt nicht über einen
Variablennamen, sondern mittels eines Laufindex.
Vorteil von Feldern: Statt umfangreicher Deklarationen ist nur eine Deklaration
notwendig; z.B. montag, ..., freitag  woche(Index).
Bei der Deklaration eines Feldes wird die maximale Zahl der Feldelemente i.d.R.
direkt festgelegt. Unabhängig davon muss jedoch nicht jedes Feldelement später
mit einem Wert belegt werden.
Allgemeine Form der Deklaration eines Feldes:
Dim Feldname(Elementzahl) As Datentyp
Beispiel:
Dim vektor(10) As Integer
 erzeugt Feld mit 11 Elementen!
Der Zugriff erfolgt dann z.B. über
vektor(1) = 1 oder intZahl = vektor(9)
Anmerkung: Der Index fängt mit Null an!
Vgl. Kofler, VB.NET, S. 139ff.
Einführung in die Programmierung mit VB.NET
32
Felder in VB.NET (II)
Beispiel:
Dim i As Integer
Dim feld(9) As Integer
For i=0 To 9
feld(i) = i+1
Next i
feld(3) = feld(3) * 4
feld(7) = feld(5) + feld(8) * feld(2)
Einführung in die Programmierung mit VB.NET
feld(0)
feld(1)
feld(2)
feld(3)
feld(4)
feld(5)
feld(6)
feld(7)
feld(8)
feld(9)
1
2
3
4
5
6
7
8
9
10
feld(0)
feld(1)
feld(2)
feld(3)
feld(4)
feld(5)
feld(6)
feld(7)
feld(8)
feld(9)
1
2
3
16
5
6
7
33
9
10
33
Aufgabe 7)
Schreiben Sie ein Programm zur Berechnung des Kapitalwertes. Die Formel
zur Berechnung ist:
Kapitalwert 
Dauer
  Einzahlungen
t 1
t
 Auszahlungen t  * 1  i
t
 Re stwert * 1  i
 Dauer
 Anschaffungskosten
>>>> Kapitalwert
Einführung in die Programmierung mit VB.NET
34
Felder in VB.NET (III)
Felder können in Visual Basic auch mehrere Dimensionen haben.
Die Deklaration erfolgt in der Form
Dim Feldname(x, ...) As Datentyp
Beispiel für ein zweidimensionales Feld:
Dim Matrix(2,3) As Single  erzeugt Feld mit 3*4=12 Elementen!
Verwendung im Programm:
Matrix(1,2) = x * 27 + 5
Auch wenn ein solches Feld für den Programmierer mehrere Dimensionen umfasst,
wird es im Speicher sequentiell abgelegt:
Matrix(0,0)
0
1
2
3
0
1
2
Einführung in die Programmierung mit VB.NET
Matrix(0,1)
Matrix(0,2)
Matrix(0,3)
Matrix(1,0)
Matrix(1,1)
Matrix(1,2)
Matrix(1,3)
Matrix(2,0)
Matrix(2,1)
Matrix(2,2)
Matrix(2,3)
35
Schleife über alle Steuerelemente (I)
Bei For-Each-Schleifen durchläuft die Schleifenvariable alle Elemente
eines angegebenen Felds bzw. einer Aufzählung.
Das folgende Beispiel verdeutlicht die Syntax. Der Datentyp der
Schleifenvariable muss mit dem des Felds bzw. der Aufzählung
übereinstimmen. Die Schleife kann vorzeitig mit Exit For abgebrochen
werden.
Beispiel:
Dim i As Integer
Dim Vektor() As Integer = {12, 7, 4}
For Each i In Vektor
MsgBox ("Der Vektor enthält: " & i)
Next
Vgl. Kofler, VB.NET, S. 166
Einführung in die Programmierung mit VB.NET
36
Schleife über alle Steuerelemente (II)
Die Eigenschaft Controls von Formularen bzw. von Container-Steuerelementen (z.B. GroupBox, Panel) verweist auf alle Steuerelemente im
Formular bzw. Container.
Mit einer For-Each-Schleife kann bequem auf diese Aufzählung von
Steuerelementen zugegriffen werden.
Beispiel:
Dim c As Control
Dim Farbe As String
For Each c In pnlFarbe.Controls
Farbe = Mid(c.Name, 4)
MsgBox(Farbe, , "Farbe")
Next
Vgl. Kofler, VB.NET, S. 690-696
Einführung in die Programmierung mit VB.NET
37
Aufgabe 8)
Schreiben Sie ein Programm, welches die Multiplikation zweier 3x3-Matrizen
vornimmt und das Ergebnis in einer Ergebnismatrix ausgibt.
>>>> MatMul
Einführung in die Programmierung mit VB.NET
38
Prozeduren (I)
Prozeduren sind die Zusammenfassung von Code-Teilen unter einem einheitlichen
Namen. Sie können sich gegenseitig aufrufen und dabei Parameter übergeben. Der
Aufruf erfolgt durch Nennung des Prozedurnamens sowie der Übergabe der geforderten Parameter.
Allgemeine Struktur:
Sub Prozedurname (Parameterliste)
lokale Variablen
Anweisungen
End Sub
Beispiel:
Sub Addiere (ByVal Z1 As Integer, ByVal Z2 As Integer, ByVal txt As TextBox)
Dim Ergebnis As Integer
Ergebnis = Z1 + Z2
txt.Text = Ergebnis.ToString("n0")
End Sub
Aufruf mit: Addiere (2, 5, txtAusgabe)
Vgl. Kofler, VB.NET, S. 167
Einführung in die Programmierung mit VB.NET
39
Prozeduren (II)
Es existieren zwei Arten der Parameterübergabe:
(1) Call by value (als Wertparameter)
- Übergabe des Wertes der Variablen
- Wert wird für die Prozedur im Speicher kopiert
- Veränderungen des Wertes innerhalb der Prozedur betreffen nur die Kopie
Beispiel: Sub Berechne (ByVal a As Integer, ByVal b As Single)
(2) Call by reference (als Rückgabeparameter)
- Übergabe der Adresse der Variablen
- Adresse wird für die Prozedur im Speicher kopiert
- Veränderungen des Wertes innerhalb der Prozedur betreffen auch die
aufrufende Prozedur
Beispiel: Sub Berechne (ByRef a As Integer, ByRef b As Single)
Vgl. Kofler, VB.NET, S. 174
Einführung in die Programmierung mit VB.NET
40
Prozeduren (III)
Beispiel:
Sub Berechne_Click
Dim a As Integer
a=5
txtTest.Text = a.ToString
Aendere1 (a)
txtTest.Text = a.ToString
Aendere2 (a)
txtTest.Text = a.ToString
End Sub
Ergebnis:
Vor den Prozeduren: txtTest.Text = 5
Innerhalb Aendere1:
txtTest.Text = 6
Nach Aendere1:
txtTest.Text = 5
Innerhalb Aendere2:
txtTest.Text = 6
Nach Aendere2:
txtTest.Text = 6
Sub Aendere1 (ByVal a As Integer)
a=6
txtTest.Text = a.ToString
End Sub
Sub Aendere2 (ByRef a As Integer)
a=6
txtTest.Text = a.ToString
End Sub
Einführung in die Programmierung mit VB.NET
41
Fehlerabsicherung mit Try-Catch
Um zu vermeiden, dass ein unerwarteter Fehler zur Anzeige eines Fehlerdialoges
und zum anschließenden Programmende führt, kann der Code mit einer Try-CatchKonstruktion abgesichert werden.
Allgemeine Form:
Try
Code, der eventuell Fehler auslösen könnte
Catch
Code, um auf den Fehler zu reagieren
End Try
Beispiel:
Try 'wurde in txtPruef ein Double-Wert eingegeben?
Dim Dummy As Double
Dummy = CDbl(txtPruef.Text)
Catch 'wenn nicht, dann
MessageBox.Show("Fehler!") 'Dialogfenster mit Fehlermeldung anzeigen
txtPruef.Text = ""
'TextBox wieder leeren
txtPruef.Focus()
'Cursor in leerer Textbox blinken lassen
End Try
Vgl. Kofler, VB.NET, S. 479ff.
Einführung in die Programmierung mit VB.NET
42
Validating-Ereignis
Es gibt verschiedene Zeitpunkte, zu denen überprüft werden kann, ob Benutzereingaben in einem Steuerelement korrekt sind. Ein möglicher Zeitpunkt ist der des
Fokuswechsels, also der Moment, in dem ein Steuerelement wieder verlassen
werden soll. Dann tritt das Validating-Ereignis des Steuerelementes auf.
Erzeugung einer Code-Schale für das Validating-Ereignis eines Steuerelementes:
- Öffnen des Codefensters
- im linken Listenfeld das gewünschte Steuerelement auswählen
- im rechten Listenfeld das Validating-Ereignis auswählen
Hinweis:
Analog können auch
Code-Schalen für
andere Ereignisse
erzeugt werden.
Vgl. Kofler, VB.NET, S. 590, 727
Einführung in die Programmierung mit VB.NET
43
Aufgabe 9)
Erweitern Sie das Programm zur Ermittlung der Optimalen Bestellmenge (Aufgabe 2) um eine Prozedur zur Plausibilitätsprüfung von Benutzereingaben.
Die Prozedur soll als Parameter die zu überprüfende TextBox und den geforderten Datentyp übergeben bekommen. Die Prozedur soll jeweils aufgerufen
werden, wenn der Benutzer nach einer Eingabe versucht, die TextBox zu verlassen.
>>>> Bestellmenge1
Einführung in die Programmierung mit VB.NET
44
Funktionen
Funktionen arbeiten ähnlich wie Prozeduren, geben jedoch als Ergebnis einen
Wert zurück. Dieser Rückgabewert kann einen beliebigen Datentyp haben.
Innerhalb der Funktion erfolgt die Angabe des Rückgabewertes mit dem
Schlüsselwort Return oder mit einer Zuweisung an den Funktionsnamen.
Allgemeine Struktur:
Function Funktionsname (Parameterliste) As Datentyp
lokale Variablen
Anweisungen
End Function
Beispiel:
Function Summe (ByVal a As Integer, ByVal b As Integer) As Integer
Summe = a + b 'auch möglich: Return a+b
End Function
Aufruf mit: c = Summe(a, b)
Vgl. Kofler, VB.NET, S. 167ff.
Einführung in die Programmierung mit VB.NET
45
Aufgabe 10)
Modifizieren Sie das Programm zur Matrizenmultiplikation (Aufgabe 8):
1.
Das Einlesen der Matrizen M1 und M2 soll eine Funktion übernehmen, die
als Parameter das Panel-Steuerelement übergeben bekommt, in welchem
sich die Textfelder der einzulesenden Matrix befinden. Der Rückgabewert
soll die eingelesene 2x2-Matrix enthalten.
Tip! Der Funktionskopf könnte so aussehen:
Function MatrixEinlesen(ByVal pnl As Panel) As Double(,)
2.
Das Ausgeben der Ergebnismatrix soll eine Prozedur übernehmen, die als
Parameter das Panel-Steuerelement, in welchem sich die Textfelder für die
Matrix-Ausgabe befinden, und die auszugebende 2x2-Matrix erhält.
Tip! Der Prozedurkopf könnte so aussehen:
Sub MatrixAusgeben(ByVal pnl As Panel, ByVal M As Double(,))
>>>> MatMul1
Einführung in die Programmierung mit VB.NET
46
Arbeiten mit mehreren Forms (I)
Visual-Basic-Programme bestehen i.d.R. aus mehreren Forms. Mit dem
Menüpunkt "Projekt - Windows Form hinzufügen ..." können zu einem Projekt
weitere Forms hinzugefügt werden.
Üblicherweise werden die Forms dann im Windows Form Designer gestaltet,
womit man im Prinzip jedes Mal eine neue Klasse entwirft.
Anschließend können von den so neu geschaffenen Form-Klassen während der
Laufzeit Objektinstanzen erzeugt (New-Konstruktor) und angezeigt werden.
Vgl. Kofler, VB.NET, S. 718, 722, 757ff.
Einführung in die Programmierung mit VB.NET
47
Arbeiten mit mehreren Forms (II)
Unterscheidung beim Anzeigen neuer Form-Objekte:
(1) Modale Forms (ShowDialog)
Wird eine Form modal angezeigt, so
bedeutet dies, dass der Anwender auf
diese Form reagieren muss. Solange
eine modale Form am Bildschirm
angezeigt wird, kann kein anderes
Fenster mehr bedient werden - die
Codeausführung stoppt, bis die modale
Form wieder geschlossen wird.
(2) Gleichberechtigte Forms (Show)
Wird eine Form gleichberechtigt angezeigt, so können die anderen Fenster
weiterhin parallel bedient werden.
Code-Beispiel:
Dim frm As New frmInfo
frm.Show()
Code-Beispiel:
Dim frm As New frmInfo
frm.ShowDialog()
In beiden Fällen kann ein angezeigtes Form-Objekt mit
- Me.Close
wieder geschlossen oder mit
- Me.Hide
ausgeblendet werden.
Vgl. Kofler, VB.NET, S. 758ff.
Einführung in die Programmierung mit VB.NET
48
Aufgabe 11)
Erweitern Sie das Kapitalwertprogramm, indem Sie einen "Info"-Button in
die Hauptform einfügen, bei dessen Betätigung sich eine neue Form modal
öffnet, die den Namen des Programms sowie dessen Autor ausweist.
>>>> Kapitalwert1
Einführung in die Programmierung mit VB.NET
49
MDI-Anwendungen
Problem beim Arbeiten mit mehreren Forms ist, dass diese unabhängig voneinander auf dem Bildschirm dargestellt werden. Häufig ist es sinnvoll, ein Hauptfenster zu bestimmen. MDI-Anwendungen ermöglichen dies.
MDI steht für Multiple Document Interface und bedeutet, dass in einem meist bildschirmfüllenden Hauptfenster mehrere Dokumentfenster angezeigt werden.
Es kann pro Anwendung nur eine MDI-Form geben. Sie muss die Start-Form sein.
Erstellt wird sie wie eine gewöhnliches Form, lediglich die IsMdiContainer-Eigenschaft wird auf True gestellt.
Um dann eine Form als Subfenster der MDI-Form anzuzeigen, muss beim Aufruf
der Form die Eigenschaft MdiParent den Wert Me zugewiesen bekommen, der auf
das Hauptfenster verweist.
Beispiel:
Dim frmInfo As New frmInfo()
frmInfo.MdiParent = Me
frmInfo.Show()
Vgl. Kofler, VB.NET, S. 768ff.
Einführung in die Programmierung mit VB.NET
50
Menüs
Um eine Form mit einem Menü auszustatten, fügt man einfach das Steuerelement
MainMenu aus der Toolbox in diese ein.
Das noch leere Menü erscheint dann automatisch am oberen Ende der Form. Die
Benennung der einzelnen Menüpunkte kann einfach per Tastatur direkt im Formular erfolgen. Alternativ kann für die einzelnen Menüpunkte auch die TextEigenschaft im Eigenschaftsfenster verändert werden.
Bevor per Doppelklick Click-Ereignisprozeduren zu den einzelnen Menüeinträgen
in den Code eingefügt werden, sollten diese zunächst unbedingt aussagekräftig
benannt werden. Dies erfolgt wie üblich durch Verändern der Name-Eigenschaft
im Eigenschaftsfenster.
Vgl. Kofler, VB.NET, S. 780ff.
Einführung in die Programmierung mit VB.NET
51
Aufgabe 12)
Erstellen Sie ein Programm bestehend aus einer MDI-Form "Faktur", die folgendes Menü enthält:
Aktion
Geschäft
Ende
Verwaltung
Kunden
Artikel
Statistik
Info
Umsätze
Artikel
Füllen Sie den Menüpunkt "Ende" mit dem Befehl, der das Programm beendet,
und erstellen Sie eine zweite Form, die Informationen über den Programmierer
enthält und über den Menüpunkt "Info" angesprochen wird.
>>>> Faktur
Einführung in die Programmierung mit VB.NET
52
Arbeiten mit Datenbanken: Relationale Datenbanken
VB.NET unterstützt das Arbeiten mit unterschiedlichen Datenbanken. Schnittstellen für den Datenzugriff stehen unter anderem für Access- und SQL-ServerDatenbanken, aber auch für Oracle- oder IBM-Datenbanken zur Verfügung. Insbesondere relationale Strukturen können einfach bearbeitet werden.
Beispiel einer relationalen Datenbank:
Datenbank: Verwaltung
KNR
Name
Vorname
KNR
ANR
1
1
1
2
1
Roßbach
Peter
2
Hasenkamp Ulrich
2
1
3
Meier
Erwin
2
2
4
Müller
Uwe
2
3
5
Schmidt
Hans
3
3
4
4
Tabelle: Kunde
Tabelle: Artikel
ANR
Bezeichnung
Preis
1
Rechner
3000
2
Tastatur
200
3
Monitor
900
4
Drucker
700
Tabelle: Geschäft
Einführung in die Programmierung mit VB.NET
53
Arbeiten mit Datenbanken: SQL als Abfragesprache
Allgemeine Form für SELECT-Abfragen in SQL:
SELECT Attribut[,Attribut1,...] FROM Tabelle [WHERE Bedingung]
Beispiele:
SELECT * FROM Kunde
SELECT KNR FROM Kunde WHERE Name='Roßbach' AND Vorname='Peter'
SELECT ANR FROM Geschaeft WHERE KNr=1
SELECT Bezeichnung, Preis FROM Artikel WHERE ANR=2
KNR
Name
Vorname
1
Roßbach
Peter
2
Hasenkamp
Ulrich
3
Meier
Erwin
4
Müller
Uwe
5
Schmidt
Hans
Tabelle: Kunde
Datenbank: Verwaltung
KNR
ANR
1
1
1
2
2
1
2
Tabelle: Artikel
ANR
Bezeichnung
Preis
2
1
Rechner
3000
2
3
2
Tastatur
200
3
3
3
Monitor
900
4
4
4
Drucker
700
Vgl. Kofler, VB4,
Tabelle: Geschäft
Einführung in die Programmierung mit VB.NET
S. 580ff.
54
ADO.NET: Einführung
ADO.NET ist eine Datenzugriffsschnittstelle von VB.NET. ADO.NET ist Teil des
.NET-Frameworks und wird über zahlreiche Klassen der Bibliothek System.Data
verwendet.
Eine Anwendung benutzt die ADO.NET-Programmierschnittstelle, um abstrahierend auf eine Datenquelle zugreifen zu können. ADO.NET bedient sich so
genannter .NET Data Provider, um den eigentlichen Zugriff, z.B. auf OracleDatenbanken oder SQL-Server, zu tätigen. Einen Data Provider kann man sich als
eine Art Treiber vorstellen.
Um einen Zugriff auf Access-Datenquellen zu realisieren wird der OLEDB .NET
Data Provider verwendet, welcher einen Treiber für Access-Datenbanken besitzt
(so genannter Jet-Treiber "Microsoft.Jet.OLEDB.4.0").
Quelle: Christian Weyer: XML Web Service-Anwendungen mit MS.NET, Addison-Wesley, München u.a. 2002, S. 118 ff.
Einführung in die Programmierung mit VB.NET
55
ADO.NET: Das DataSet-Objekt
Das DataSet-Objekt von ADO.NET besitzt die Fähigkeit, komplexe Datenstrukturen
(Tabellen und deren Beziehungen) im Hauptspeicher abzubilden und über einen
längeren Zeitraum hinweg im Programm zu halten. Wenn man ein DataSet-Objekt
erzeugt hat, kann man mit ihm arbeiten als wäre es eine Datenbank im Hauptspeicher.
Ein DataSet-Objekt kann gänzlich unabhängig von einer Datenquelle genutzt werden, indem es manuell vom Programmcode aus erstellt und gefüllt wird. Es ist
aber auch möglich, ein DataSet-Objekt mit einer Datenquelle, z.B. einer AccessDatenbank, zu verbinden.
Als Mediator-Objekt zwischen einem DataSet und einer Datenquelle dient dabei
ein DataAdapter, welcher die Verbindung realisiert und kontrolliert. Über den
DataAdapter kann man Tabellen in einem DataSet füllen. Außerdem kann der
DataAdapter Änderungen, die im DataSet vorgenommen wurden, auch an die
Datenquelle weitergeben und dort umsetzen, ohne dass das DataSet von der
Quelle weiß.
Der DataAdapter wiederum benötigt eine Verbindung über ein Connection-Objekt,
um mit der Datenbank zu kommunizieren.
Quelle: Christian Weyer: XML Web Service-Anwendungen mit MS.NET, Addison-Wesley, München u.a. 2002, S. 142 ff.
Einführung in die Programmierung mit VB.NET
56
ADO.NET: Objekte für den Datenzugriff
DataViewObjekt
DataViewObjekt
DataViewObjekt
DataSet-Objekt
DataAdapter-Objekt
Connection-Objekt
• beschreibt eine bestimmte Ausprägung (View) eines DataSet
• geeignet für DataBinding von Steuerelementen
• für ein DataSet können gleichzeitig mehrere DataViews
existieren
• Speicherrepräsentation eines (komplexen) Datenbestandes
• realisiert und kontrolliert die Verbindung zwischen DataSet und
Datenquelle
• vollzieht Füll-, Änderungs- und Löschoperationen
• verweist auf die Datenquelle
• implementiert die Treiberfunktionalität für unterschiedliche Datenquellenarten, z.B. "Microsoft.Jet.OLEDB.4.0"-Treiber für AccessDatenbanken
Datenquelle
(z.B. Access-Datenbank)
Einführung in die Programmierung mit VB.NET
57
ADO.NET: Datenbankzugriff (I)
Im Folgenden werden die notwendigen Programmierschritte beschrieben, um von
einer Form aus mit den Daten einer externen Access-Datenquelle arbeiten zu können.
1. Einrichten eines Verweises auf die für den Datenzugriff benötigte Klassenbibliothek:
Imports System.Data
2. Deklaration der für den Datenzugriff benötigen Objekte:
Dim objConnection As OleDb.OleDbConnection = _
New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; _
Data Source=d:\AccessDB.mdb")
Dim objDataAdapter As OleDb.OleDbDataAdapter
Dim objDataSet As DataSet
Dim objDataView As DataView
3. Öffnen der Datenbank-Verbindung:
objConnection.Open()
Einführung in die Programmierung mit VB.NET
58
ADO.NET: Datenbankzugriff (II)
4. Gleichzeitiges Instanzieren und Konfigurieren des DataAdapters:
objDataAdapter = New OleDb.OleDbDataAdapter _
("SELECT * FROM Tabellenname", objConnection)
5. Instanzieren und Füllen des DataSet:
objDataSet = New DataSet()
objDataAdapter.Fill(objDataSet, "Tabellenname")
6. Erzeugen eines DataView-Objektes, das auf die gesamte Tabelle im DataSetObjekt verweist:
objDataView = New DataView(objDataSet.Tables("Tabellenname"))
Hinweis: Das DataView-Objekt zeigt zunächst per Default auf den ersten Datensatz der
Tabelle!
7. Anbinden eines Textfeldes an ein Datenfeld (= Spalte in Tabelle):
Me.txtTextBox.DataBindings.Add("Text", objDataView, "Feldname")
Hinweis: Das Anbinden anderer Steuerelemente erfolgt analog!
Einführung in die Programmierung mit VB.NET
59
ADO.NET: Datenbankzugriff (III)
Wenn eine Form, von der aus ein Datenbankzugriff erfolgte, geschlossen
wird, sollte die Verbindung zur Datenbank getrennt und ein eventuell
gefülltes DataSet-Objekt geleert werden:
objConnection.Close()
objDataSet = Nothing
Einführung in die Programmierung mit VB.NET
60
Aufgabe 13)
Erweitern Sie das Programm aus Aufgabe 12), indem Sie eine Form Kundenverwaltung erstellen, die über den Menüpunkt "Verwaltung/Kunde" aufgerufen
wird. Kopieren Sie dabei zunächst die Datenbank dbFaktur.mdb auf Ihre lokale
Festplatte. Beim Aufruf der Form soll der Inhalt der Tabelle tabKunden aus
dbFaktur.mdb in ein DataSet geladen und der erste Datensatz angezeigt werden.
>>>> Faktur1
Einführung in die Programmierung mit VB.NET
61
ADO.NET: Datenbankzugriff (IV)
Austausch von Connection und DataAdapter für den Zugriff auf den SQL-Server
1.
Einbinden der Klasse Systems.Data.SQLClient
Imports System.Data.SQLClient
2.
Einrichten eines Verweises auf die für den Datenzugriff benötigte Klassen-bibliothek:
Imports System.Data.SQLClient
3.
Deklaration der für den Datenzugriff benötigen Objekte
Dim objConnection As SQLConnection
Dim objDataAdapter As SQLDataAdapter
4.
Instanziieren der Connection
objConnection = New SqlConnection _
("Data Source=localhost; _
Integrated Security=true; _
Initial Catalog = dbFaktur")
5.
Instanziieren des Data Adapters
objDataAdapter = New SQLDataAdapter _
(“Select * from tabKunden”, _
objConnection)
Einführung in die Programmierung mit VB.NET
ADO.NET: Navigation mit BindingContext (I)
Sobald in einer Form Steuerelemente an eine Datenquelle mit
DataBindings.Add gebunden wurden, verwaltet ein Objekt der
BindingContext-Klasse (welche von der BindingManagerBase-Klasse
erbt) sämtliche Binding-Objekte.
Das BindingContext-Objekt sorgt dafür, dass in allen gebundenen
Steuerelementen, die sich auf die gleiche Datenquelle beziehen, das
jeweils aktuelle Datenelement angezeigt wird. Sind bspw. Textfelder an
unterschiedliche Spalten einer Datentabelle gebunden, so zeigen diese
Textfelder stets synchron Daten desselben Datensatzes an - wird die
Position im BindingContext-Objekt geändert, dann werden alle
Textfelder aktualisiert.
Einführung in die Programmierung mit VB.NET
63
ADO.NET: Navigation mit BindingContext (II)
Wichtige Eigenschaften der BindingContext-Klasse:
• BindingContext(DataView).Position
- gibt an, auf welchen Datensatz die gebundenen Steuerelemente
zeigen oder legt diesen fest
- Position ist ein nullbasierter Index!
• BindingContext(DataView).Count
- liefert die Anzahl der Zeilen, die vom BindingContext-Objekt
verwaltet werden
- BindingContext(DataView).Count-1 zeigt auf den letzten Datensatz
des BindingContext-Objektes
Einführung in die Programmierung mit VB.NET
64
Aufgabe 14)
Erweitern Sie das Programm aus Aufgabe 13), indem Sie der Form Kundenverwaltung Datensatznavigatoren hinzufügen, die jeweils zum ersten, vorherigen,
nächsten oder letzten Datensatz springen.
Weiterhin soll in einem Label-Steuerelement jeweils angezeigt werden, auf welchem von wievielen Datensätzen man sich gerade befindet.
>>>> Faktur2
Einführung in die Programmierung mit VB.NET
65
ADO.NET: CommandBuilder
Um die in einem DataSet-Objekt vorgenommenen Änderungen an einem Datenbestand an die zugrundeliegende Datenquelle weiterzugeben, sind komplexe SQLAnweisungen (Insert-, Delete- und Update-Statements) notwendig.
Der OleDbDataAdapter generiert nicht automatisch diese SQL-Anweisungen, die
für den Abgleich von Änderungen an einem DataSet mit der zugeordneten
Datenquelle erforderlich sind. Man kann jedoch ein OleDbCommandBuilderObjekt erstellen, um SQL-Anweisungen für das Aktualisieren einzelner Tabellen
automatisch zu generieren, indem man die SelectCommand-Eigenschaft von
OleDbDataAdapter festlegt. Anschließend werden alle zusätzlichen, zuvor nicht
festgelegten SQL-Anweisungen vom OleDbCommandBuilder generiert.
Code-Beispiel:
Dim objCommandBuilder As OleDb.OleDbCommandBuilder
objDataAdapter.SelectCommand = New OleDb.OleDbCommand _
("SELECT * FROM Tabellenname", objConnection)
objCommandBuilder = New OleDb.OleDbCommandBuilder(objDataAdapter)
Einführung in die Programmierung mit VB.NET
66
ADO.NET: Datenmanipulation (I)
Zur Aufnahme neuer Datensätze in ein DataSet-Objekt, muss diesem zunächst
eine neue Zeile hinzugefügt werden. Anschließend kann man die neue Zeile beschreiben und dann fest in das DataSet-Objekt übernehmen.
Um die am DataSet-Objekt vorgenommenen Änderungen auch in der zugrundeliegenden Datenquelle persistent zu machen, muss der DataAdapter die UpdateMethode ausführen.
Code-Beispiel:
Dim objZeile As DataRow
objZeile = objDataSet.Tables("Tabellenname").NewRow()
objZeile.Item("Feldname1") = txtTextfeld1.Text
objZeile.Item("Feldname2") = txtTextfeld2.Text
objDataSet.Tables("Tabellenname").Rows.Add(objZeile)
objDataAdapter.Update(objDataSet, "Tabellenname")
Einführung in die Programmierung mit VB.NET
67
ADO.NET: Datenmanipulation (II)
Das Ändern von bestehenden Datensätzen erfolgt analog zur Aufnahme. Anstatt
eine neue Zeile zu erzeugen, gibt man mit Rows(Index) an, welche Zeile des
DataSet man ändern möchte. Danach leitet man das Ändern im DataSet mit der
Methode BeginEdit ein und beendet es mit der Methode EndEdit.
Zum Übernehmen der am DataSet gemachten Änderungen muss der DataAdapter
auch hier die Update-Methode ausführen.
Code-Beispiel:
Dim objZeile As DataRow
objZeile =objDataSet.Tables("Tabellenname").Rows _
(BindingContext(objDataView).Position)
objZeile.BeginEdit()
objZeile.Item("Feldname1") = txtTextfeld1.Text
objZeile.Item("Feldname2") = txtTextfeld2.Text
objZeile.EndEdit()
objDataAdapter.Update(objDataSet, "Tabellenname")
Einführung in die Programmierung mit VB.NET
68
ADO.NET: Datenmanipulation (III)
Zum Löschen von bestehenden Datensätzen aus einem DataSet, wendet man die
Delete-Methode auf eine bestimmte Zeile des DataSet an.
Zum Übernehmen der am DataSet gemachten Änderungen muss der DataAdapter
auch hier die Update-Methode ausführen.
Code-Beispiel:
objDataSet.Tables("Tabellenname").Rows(Index).Delete()
objDataAdapter.Update(objDataSet, "Tabellenname")
Einführung in die Programmierung mit VB.NET
69
Aufgabe 15)
Erweitern Sie das Programm aus Aufgabe 14), indem Sie der Form Kundenverwaltung folgende Buttons zur Datenmanipulation hinzufügen:
• Neu-Button: soll die Textfelder des
Formulars leeren
• Anhängen-Button: soll einen neu
eingegebenen Datensatz speichern
• Ändern-Button: soll einen geänderten
Datensatz speichern
• Löschen-Button: soll den angezeigten
Datensatz löschen
>>>> Faktur3
Einführung in die Programmierung mit VB.NET
70
Aufgabe 16)
Erweitern Sie das Programm aus Aufgabe 15), indem Sie eine Form Artikelverwaltung erstellen, die über den Menüpunkt "Verwaltung/Artikel" aufgerufen wird.
Beim Aufruf der Form soll der Inhalt der Tabelle tabArtikel aus dbFaktur.mdb in
ein DataSet-Objekt geladen und der erste Datensatz angezeigt werden. Des
Weiteren sollen analog zur Kundenverwaltung Datensatznavigatoren sowie
Buttons zur Datenmanipulation ergänzt werden.
>>>> Faktur4
Einführung in die Programmierung mit VB.NET
71
Arbeiten mit Datenbanken: Erweiterte Abfragen mit SQL
Mit Hilfe des Schlüsselwortes AS können die Attribute von SQL-Abfragen unter
anderem Namen bereitgestellt werden.
Allgemeine Form:
SELECT Attribut AS Name FROM Tabelle [WHERE Bedingung]
Beispiel:
Query = "SELECT KNR AS Kundennummer FROM tabKunde"
objDataAdapter = New OleDb.OleDbDataAdapter(Query, objConnection)
objDataAdapter.Fill(objDataSet, "tabKunde")
objDataView = New DataView(objDataSet.Tables("tabKunde"))
Me.txtKNr.DataBindings.Add("Text", objDataView, "Kundennummer")
Statt Attribute können in SQL-Abfragen auch Funktionen verwendet werden:
Allgemeine Form:
SELECT Funktion AS Name FROM Tabelle [WHERE Bedingung]
Beispiel:
Query = "SELECT MAX(KNR) AS Kmax FROM tabKunde"
Einführung in die Programmierung mit VB.NET
72
Das ComboBox-Steuerelement (I)
Eine ComboBox ist eine Kombination aus einer Liste und einem Textfeld.
Die Eigenschaften und Methoden der ComboBox sind weitgehend die
gleichen wie bei der Liste.
Es existiert darüber hinaus noch ein Textfeld mit dem Eigenschaftsnamen
"Text". Es kann direkt beschrieben werden.
Eine Auswahl aus der darunter liegenden Liste hat jedoch immer das Überschreiben des Textfeld-Inhalts zur Folge.
Vgl. Kofler, VB.NET, S. 625ff.
Einführung in die Programmierung mit VB.NET
73
Das ComboBox-Steuerelement (II)
Bei der ComboBox kann nicht nur die Text-Eigenschaft an ein konkretes
Datenfeld mit Databindings.Add gebunden werden, sondern eine komplette
Spalte einer Tabelle kann an das Listenfeld der ComboBox gebunden werden.
Um dies zu realisieren weist man der DataSource-Eigenschaft der ComboBox
ein DataView-Objekt zu und gibt anschließend mit der DisplayMemberEigenschaft der ComboBox an, welche Spalte des DataView-Objektes in der
Liste angezeigt werden soll.
Code-Beispiel:
Query = "SELECT KNR, [zuname] & ', ' & [vorname] AS Name FROM Kunden"
adapterKunden = New OleDb.OleDbDataAdapter (Query, objConnection)
adapterKunden.Fill(objDataSet, "Kunden")
viewKunden = New DataView(objDataSet.Tables("Kunden"))
Me.cboKunde.DataBindings.Add("Text", viewKunden, "Name")
Me.cboKunde.DataSource = viewKunden
Me.cboKunde.DisplayMember = "Name"
Ein Objekt der BindingContext-Klasse sorgt auch hier dafür, dass stets ein
Verweis auf den aktuellen Datensatz vorliegt.
Einführung in die Programmierung mit VB.NET
74
Das ListView-Steuerelement (I)
Das ListView-Steuerelement dient ebenso wie die ListBox dazu, auswählbare
Listen darzustellen. Im Gegensatz zur ListBox kann das ListView-Steuerelement
jedoch auch mehrspaltige Listen anzeigen und verwalten.
Das Einfügen von Daten in ein ListView-Objekt kann wahlweise in der
Entwicklungsumgebung oder per Code erfolgen.
Initialisierung in der Entwicklungsumgebung:
In der Entwicklungsumgebung von VB.NET kann man mit einem Dialog für
die Columns-Eigenschaft die Spalten für das ListView-Steuerelement definieren (Beschriftung, Ausrichtung, Breite).
Vgl. Kofler, VB.NET, S. 628ff.
Einführung in die Programmierung mit VB.NET
75
Das ListView-Steuerelement (II)
Die Items-Eigenschaft des ListView-Objektes verweist auf die einzelnen Listeneinträge. Enthält das ListView-Objekt mehrspaltige Einträge, so verweist die
SubItems-Eigenschaft eines ListViewItems auf die verschiedenen Spalten.
Sowohl die Items- als auch die SubItems-Eigenschaft sind indexiert, wobei der
Index jeweils mit Null beginnt.
Erzeugen eines neuen Items:
Dim LVItem As ListViewItem
LVItem = ListView.Items.Add("Listeneintrag")
Erzeugen eines neuen SubItems innerhalb eines bestehenden Items:
LVItem.SubItems.Add("SubListeneintrag")
Mit Clear können evtl. vorhandene Spalten bzw. Listeneinträge gelöscht werden:
ListView.Columns.Clear()
bzw.
ListView.Items.Clear()
Der Datenzugriff auf ein Datenelement erfolgt in der Form:
ListView.Items(Index).SubItems(Index).Text
Einführung in die Programmierung mit VB.NET
76
Aufgabe 17)
Erweitern Sie das Programm aus Aufgabe 16), indem Sie eine Form Rechnung erstellen, die
über den Menüpunkt "Aktion/Geschäft" aufgerufen wird. Beim Aufruf der Form soll zunächst
die größte Rechnungsnummer aus der Tabelle tabUmsatz bestimmt und um Eins als neue
Rechnungsnummer hochgezählt werden.
Nach der Auswahl eines Kunden in einer ComboBox sollen schließlich die bestellten Artikel
ebenfalls in einer ComboBox selektiert und deren Anzahl eingegeben werden. Nach der
jeweiligen Eingabe sollen die Daten mit dem Übernehmen-Button in ein ListView-Objekt
überführt und der Gesamtbetrag pro
Artikel berechnet werden. Der Berechnen-Button dient schließlich der Berechnung der Mehrwertsteuer und des
Rechnungsbetrages auf der Basis des
ListView-Objektes und der SpeichernButton der Speicherung der Daten in der
Tabelle tabUmsatz.
>>>> Faktur5
Einführung in die Programmierung mit VB.NET
77
Zugriff auf andere Programme: Word (I)
Man kann in VB.NET auch die Programmbibliotheken anderer Applikationen,
z.B. die von Word oder Excel, verwenden. Dazu muss zunächst ein Verweis auf
die entsprechende Programmbibliothek eingefügt werden.
Zum Einfügen eines Verweises auf die Word-Bibliothek geht man
folgendermaßen vor:
- im Menü "Projekt/Verweis hinzufügen ..." anklicken
- Registerblatt "Com" wählen
- aus der angezeigten Liste "Microsoft Word x.0 Object Library" selektieren
und den Button "Auswählen" anklicken
Danach kann man die eingebundene Bibliothek z.B. dazu nutzen, um eigene
Klassen zu entwickeln, mit denen man Word von VB.NET aus nutzen und
steuern kann.
Vgl. Martin, Kapitel 4 & 8
Einführung in die Programmierung mit VB.NET
78
Zugriff auf andere Programme: Word (II)
Die Klasse clsWord ist eine selbstprogrammierte Klasse, die Methoden zum
"Fernbedienen" von Word aus VB.NET heraus bereitstellt. Um die Klasse
nutzen zu können, muss wie zuvor beschrieben ein Verweis auf die WordProgrammbibliothek eingerichtet werden und dem Projekt die Datei clsWord.vb
hinzugefügt werden (Menü "Projekt/Vorhandenes Element hinzufügen ...")
Danach kann man - wie aus dem
Screenshot ersichtlich - die
Methoden von clsWord in den
anderen Projektbestandteilen
benutzen, nachdem man dort ein
Objekt der Klasse instanziert hat.
Einführung in die Programmierung mit VB.NET
79
Zugriff auf andere Programme: Word (III)
Wichtige Methoden der Klasse clsWord:
- Dateizugriff (Vorlagenname As String)
Öffnet ein neues Word-Dokument basierend auf der angegebenen WordVorlage.
- TextmarkeFüllen (Marke As String, Text As String)
Füllt die in Text übergebene Zeichenkette, in die mit Marke bezeichnete
Textmarke eines Word-Dokumentes ein.
- GeheZuTextmarke (Marke As String)
Springt zu der mit Marke bezeichneten Textmarke eines Word-Dokumentes.
- SchreibeText(Text As String)
Schreibt die in Text übergebene Zeichenkette in ein Word-Dokument.
- NeueZeile
Erzeugt einen Zeilenumbruch in einem Word-Dokument.
Einführung in die Programmierung mit VB.NET
80
Aufgabe 18)
Erweitern Sie das Programm aus Aufgabe 17), indem Sie der Form Rechnung
einen Drucken-Button hinzufügen. Durch Anklicken des Buttons sollen die
angezeigten Rechnungsdaten an ein neu zu erzeugendes Word-Dokument
übergeben werden, das man dann bequem ausdrucken kann.
Kopieren Sie zunächst die Dateien "clsWord.vb" und "Rechnung.dot" auf Ihre
lokale Festplatte. "clsWord.vb" enthält die Klasse clsWord und deren Methoden
zum Nutzen und Steuern von Word. "Rechnung.dot" ist eine Word-Dokumentvorlage für eine Rechnung, in der folgende Textmarken definiert sind:
>>>> Faktur6
Einführung in die Programmierung mit VB.NET
81
Eigene Klassen (I)
VB.NET ermöglicht als objektorientierte Programmiersprache nicht nur die
Nutzung bereits vorhandener Klassen, sondern bietet auch die Möglichkeit
eigene Klassen zu programmieren.
Klassen bieten die Grundlage für eine umfangreiche Wiederverwendung von
Code. Statt ein immer wiederkehrendes Problem immer wieder neu zu lösen,
kann man für dieses eine Klasse entwickeln und diese dann in verschiedenen
Projekten entweder als Code (durch simples Einfügen) oder als Bibliothek
(durch eine Referenz) nutzen.
Eine Klasse ist die abstrakte Beschreibung (der Bauplan) eines
objektorientierten Datentyps. Die Schnittstelle nach außen (also zur
Anwendung der Klasse) wird in erster Linie durch Eigenschaften und Methoden
hergestellt.
Vgl. Kofler, VB.NET, S. 217ff.
Einführung in die Programmierung mit VB.NET
82
Eigene Klassen (II)
Auf der Codeebene wird die Definition einer Klasse durch Class name
eingeleitet und durch End Class abgeschlossen. Innerhalb dieses Blocks
werden die Elemente der Klasse definiert - also Variablen, Prozeduren (alias
Methoden), Eigenschaften usw.
Allgemeine Struktur:
Class Klassenname
Private x As Datentyp
Public y As Datentyp
Private Sub p()...
Sub m() ....
Property e() As Datentyp
End Class
'interne Klassenvariable
'öffentliche Klassenvariable
'interne Prozedur
'von außen zugängliche Methode
'von außen zugängliche Eigenschaft
Entscheidend bei Entwurf einer Klasse ist die Überlegung, welche Elemente der
Klasse nur für die interne Programmierung innerhalb der Klasse gedacht sind
und welche Elemente extern zur Verfügung stehen sollen.
Einführung in die Programmierung mit VB.NET
83
Aufgabe 19)
Modifizieren Sie das Programm aus Aufgabe 9), indem Sie die
Plausibilitätsprüfung nicht mehr als Prozedur innerhalb eines
Formulars deklarieren, sondern als Methode innerhalb einer
Klasse.
>>>> Bestellmenge2
Einführung in die Programmierung mit VB.NET
84
1
2
3
4
b
aa ** 11
++
bb ** 33
a*2
+
b*4
d
c*1
+
dd **33
c*2
+
d*4
x
a
c
Einführung in die Programmierung mit VB.NET
85