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

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

Einstieg in VB.NET von René Martin
- Für Programmiereinsteiger -
Einstieg in VB.NET
gp Kapitel 1 Die Grundlagen
  gp 1.1 Nach der Installation
  gp 1.2 Der erste Start
  gp 1.3 Das erste Formular
  gp 1.4 Eigenschaften
    gp 1.4.1 Regeln für Namen
    gp 1.4.2 Die Eigenschaften
  gp 1.5 Die Toolbox
  gp 1.6 Das Meldungsfenster
    gp 1.6.1 Die Code-Eingabe für die MessageBox
    gp 1.6.2 Ein Wort zum »alten« Visual Basic
    gp 1.6.3 Die Code-Eingabe allgemein
  gp 1.7 Ein Textfeld
  gp 1.8 Texte verketten
  gp 1.9 Andere Zeichen
    gp 1.9.1 Noch ein Wort zum Code-Tippen
    gp 1.9.2 Ein Wort zur Syntax
  gp 1.10 Variablen
  gp 1.11 Ein theoretischer Exkurs: Werte- und Referenztypen
  gp 1.12 Zuweisen von Werten an Variablen
  gp 1.13 Verzweigungen
  gp 1.14 Einige Hilfen für den Benutzer
    gp 1.14.1 Setze den Cursor in ein Textfeld
    gp 1.14.2 Ok und Abbrechen
    gp 1.14.3 Die Reihenfolge der Steuerelemente
  gp 1.15 Ein zweites Textfeld
    gp 1.15.1 Vergleiche
  gp 1.16 Rechnen in Basic
  gp 1.17 Optionsfelder
    gp 1.17.1 Schnell und ordentlich mehrere Steuerelemente platzieren
  gp 1.18 Ein zweites Gruppenfeld
  gp 1.19 Dynamische Steuerelemente
  gp 1.20 Das Ereignis »Klick«
  gp 1.21 Prozeduren
  gp 1.22 Ein theoretischer Exkurs: Prozeduren
  gp 1.23 Module
  gp 1.24 Ein theoretischer Exkurs: Objekte, Eigenschaften und Methoden
    gp 1.24.1 Objekte
    gp 1.24.2 Methoden
    gp 1.24.3 Eigenschaften
  gp 1.25 Zusammenfassung


Galileo Computing

1.15 Ein zweites Textfeld  downtop

Nun gibt es noch einen »Schlitz«, in den der Benutzer sein Geld einwirft, natürlich nur übertragen gesprochen. Ich hätte gerne ein zweites Textfeld, in das der Benutzer den Geldbetrag eingeben kann. Es wird »txtGeld« genannt, der Text ist natürlich leer, das heißt, er wird gelöscht. Darunter befindet sich ein Label mit dem beschreibenden Text »Einwurf mind. 1 E« – schließlich muss der Benutzer wissen, was der Kaffee kostet.

Abbildung

Abbildung 1.25   Das Textfeld für den Geldeinwurf

Nun gibt es verschiedene Varianten: Der Benutzer wirft etwas Falsches ein (schwedische Kronen, britische Pfund), er wirft zu wenig ein, er wirft genau einen Euro ein oder mehr als einen Euro. Im ersten Fall wird er höflich darauf aufmerksam gemacht, dass er kein »korrektes« Geld eingeworfen, das heißt keine Zahl eingegeben hat. Im zweiten Fall bekommt er einen Hinweis, dass er noch etwas Geld einwerfen muss. Falls er mehr als einen Euro eingegeben hat, so erhält er natürlich sein Wechselgeld zurück.

Dazu brauchen wir – wie könnte es anders sein – eine neue Verzweigung. Hinter der Ok-Schaltfläche befindet sich folgender Code:

If txtName.Text = "" Then 
   MessageBox.Show _
   ("Hey, Benutzer, dein Name fehlt! ")
   txtName.Select()
Else
   MessageBox(Achtung: " & txtName.Text & _
   "Jetzt gibt es Kaffee!")
End If

Man könnte nun im Sonst-Zweig noch einmal überprüfen, ob der Betrag korrekt ist. Dazu muss man eine Verzweigung in einer Verzweigung schachteln. Das ist zwar möglich und korrekt, aber bei zu vielen Ebenen kann der Code unübersichtlich werden. Deshalb schlage ich folgende Variante vor. Hat der Benutzer keinen Namen eingegeben, dann erhält er einen Hinweis und: Ende! Das sieht so aus:

If txtName.Text = "" Then 
   MessageBox.Show _
   ("Hey, Benutzer, dein Name fehlt!")
   txtName.Select()
   Exit Sub
End If
MessageBox.Show _
(Achtung: " & txtName.Text & _
"Jetzt gibt es Kaffee! ")

Die Anweisung Exit Sub sorgt dafür, dass das Programm beendet wird. Achtung: Die Maske wird nicht geschlossen, es wird nur nichts mehr ausgeführt, was sich weiter unten befindet. Es kann nun überprüft werden, ob es sich bei der Eingabe um eine Zahl handelt. Dazu wird eine Funktion benötigt. Sie heißt IsNumeric(). Das Ergebnis dieser Funktion ist entweder »Wahr« oder »Falsch«. Also wird geschrieben:

If IsNumeric(txtGeld.Text) = False Then
   MessageBox("Bitte nur Zahlen eingeben! ")
   Exit Sub
End If

Die Funktion IsNumeric verlangt also eine Zeichenkette und überprüft, ob es sich um eine gültige Zahl handelt. Dies ist wichtig, wenn mit der Zahl weitergerechnet wird, denn angenommen, der Benutzer hat »DREI« eingegeben, dann »weiß« das Programm nicht, was es mit diesem Wert tun soll. Das Ergebnis der Funktion ist also immer »Wahr« oder »Falsch« beziehungsweise »True« oder »False«. Es gibt Programmierer, die schreiben statt

If IsNumeric(txtGeld.Text) = True Then

den Befehl

If IsNumeric(txtGeld.Text) Then

Das würde auch genügen. Für unsere Falsch-Auswertung könnte man auch schreiben:

If Not IsNumeric(txtGeld.Text) Then

Das Verknüpfungselement Not dreht den Wahrheitswert um, er macht also aus »Falsch« »Wahr«. Damit haben wir wieder die Variante von oben. Leider kann man den Typ nicht mit folgenden Eigenschaften abfragen:

txtGeld.GetType. Name
txtGeld.GetType.FullName
Abbildung

Abbildung 1.26   Eine falsche Eingabe

Da ein Textfeld immer eine Zeichenkette zurückgibt, wird die Antwort immer »System.String« oder »String« lauten.

Nun zum zweiten Fall. Der Benutzer hat eine gültige Zahl eingetragen, aber eben nicht genug für den Kaffee. Dann wird überprüft:

ElseIf txtGeld.Text < 1 Then
   MessageBox("Hey, es fehlt noch Knete! ")
Exit Sub

Basic zeigt den Vergleich

txtGeld.Text < 1

als fehlerhaft an. Warum? Die Erklärung lautet:

Eine implizite Konvertierung von String in Double ist nicht erlaubt.

Was heißt das? Die Eigenschaft txtGeld.Text liefert beispielsweise 0,8. Nein: nicht 0,8, sondern »0,8«. Das bedeutet, dass die Zahl eine Zeichenkette ist. Man kann mit ihr nicht rechnen und man kann sie nicht mit einer anderen Zahl vergleichen. Woher kommt das? Das Textfeld als Objekt gibt immer nur Zeichenketten zurück, unabhängig davon, ob es sich dabei um Texte (also Buchstaben) oder Zahlen (also Ziffern) handelt. Für die Umwandlung sind wir verantwortlich. Also benötigen wir eine Funktion, welche die Zeichenkette »0,8« in die Zahl 0,8 umwandelt. Sie heißt CDbl(). Das »C« steht für »convert« und »Dbl« für »Double«. Das Gleiche könnte die Methode Convert.ToDouble leisten. Modifizieren wir die obige Zeile in:

ElseIf CDbl(txtGeld.Text) < 1 Then
   MessageBox.Show("Hey, es fehlt noch Knete!")

oder

ElseIf Convert.ToDouble(txtGeld.Text) < 1 Then
   MessageBox.Show("Hey, es fehlt noch Knete!")

Sie sehen schon, dass Datentypen und Funktionen eine wichtige Rolle beim Programmieren spielen. Hier ein Überblick über die Konvertierungsfunktionen von VB.NET:

Tabelle 1.5   Die Liste der Konvertierungsfunktionen
Funktion (VB) Funktion konvertiert in
Cbool Convert.ToBoolean Boolean
Cbyte Convert.ToByte Byte
Cchar Convert.ToChar Char
Cdate Convert.ToDateTime Date
CDbl Convert.ToDouble Double
Cdec Convert..ToDecimal Decimal
Cint Convert.ToInteger Integer
CLng   Long
Cobj   Object
CSng Convert.ToSingle Single
CStr Convert.ToString String

Es gibt noch eine Funktion, die das Gleiche leistet wie die Konvertierungsfunktionen. Sie lautet: CType und verlangt zwei Werte: Die Zahl oder den Text, welche konvertiert werden soll, und den Typ, in welchen umgewandelt wird. Also beispielsweise:

ElseIf CType(txtGeld.Text, Double) < 1 Then

Die Typen, die verwendet werden dürfen, stehen in der oberen Tabelle. Übrigens kann mit der Methode GetType herausgefunden werden, um welchen Datentyp es sich handelt. Wenn Sie ihn anzeigen lassen möchten, dann vergessen Sie das ToString nicht, also:

MessageBox.Show("i.GetType.ToString")

Zurück zu unserem Beispiel. Bei einer fehlerhaften Eingabe soll in das Feld zurückgesprungen werden – am schönsten wäre es, wenn der Inhalt markiert würde. Statt

txtGeld.Select()

wird geschrieben:

txtGeld.SelectAll()
Exit Sub

Während Select() nur den Cursor hineinsetzt, markiert SelectAll() den gesamten Inhalt der TextBox.

Die Ungleichheitszeichen sind bekannt, oder? Folgende Zeichen stehen uns in VB.NET zur Verfügung: =, <, >, <= und >=. Das gilt natürlich nur für Zahlen. Man kann auch Texte miteinander vergleichen – darüber werden wir noch reden.

Doch zuerst wird das Wechselgeld berechnet:

ElseIf CDbl(txtGeld.Text) > 1 Then
MessageBox.Show _
("Hey, du bekommst noch Knete raus.")

Schön wäre natürlich auch, wenn ich sehen könnte, wie viel Geld ich noch bekomme. Na, das Rückgabegeld ist doch txtGeld.Text - 1. Nein, das stimmt nicht ganz, denn rechnen kann man nur, wenn der Text in eine Zahl verwandelt wurde. Also:

CDbl(txtGeld.Text) - 1

Das ist korrekt und berechnet die Differenz. Da das Ergebnis aber eine Zahl ist und wir das Ergebnis anzeigen lassen möchten, muss es wieder zurückverwandelt werden – diesmal in einen Text:

MessageBox("Hey, du bekommst noch " & _
CStr(CDbl(txtGeld.Text) - 1) & _
" heraus."
Abbildung

Abbildung 1.27   Zu viel Geld wurde eingeworfen.


Galileo Computing

1.15.1 Vergleiche  toptop

Neben den mathematischen Funktionen und den Textfunktionen existieren Vergleichsoperatoren und Verknüpfungskonjunktoren:

Zwei Texte oder Zahlen werden mit folgenden Operatoren verglichen:

Tabelle 1.6   Mathematische und logische Verknüpfungen
Operator Beschreibung
= Gleich
< Kleiner als
> Größer als
<= Kleiner gleich
>= Größer gleich
<> Ungleich
Like Stringvergleich
Is Für Referenztypen, die miteinander verglichen werden. Liefert »Wahr«, wenn eine Referenz auf das gleiche Objekt erfolgt.

Der Unterschied bei Vergleichen zwischen »=« und »Like« besteht darin, dass mit »Like« auch »?«, »*« und »#« verwendet werden dürfen. »#« steht für ein beliebiges Zeichen. Beispiele:

»Türkentrunk« = »Türkentrunk«

ergibt »True«.

»Türkentrunk« = »Türköntrünk«

ergibt dagegen »False«. »True« liefern folgende vier Vergleiche:

»Türkentrunk« Like »Tür?entrunk«

»Türkentrunk« Like »Türke*«

»Türkentrunk« Like »?ü*«

»T7« Like »T#«

Ebenso können zwei logische Operatoren miteinander verglichen werden:

Tabelle 1.7   Logische Operatoren
Operator Beschreibung
Not Negation
And Logisches Und
Or Logisches Oder (das eine oder das andere)
Xor Exklusives Oder (entweder das eine oder das andere)

Die Verknüpfungsmöglichkeiten können in einer Tabelle aufgelistet werden:

Tabelle 1.8   Logische Verknüpfungen und ihre Ergebnisse
Wert 1 Wert 2 And Or Xor
Wahr Wahr Wahr Wahr Falsch
Wahr Falsch Falsch Wahr Wahr
Falsch Wahr Falsch Wahr Wahr
Falsch Falsch Falsch Falsch Falsch
Wahr Leer Falsch Wahr Wahr
Falsch Leer Falsch Falsch Falsch
Leer Wahr Falsch Wahr Wahr
Leer Falsch Falsch Falsch Falsch

  

VB.NET

Einstieg in ASP.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML