IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Visual Basic - Visual Basic - Grundlagen



Visual Basic - Grundlagen

Hier die neue Version der VB Dokumentation. Themen wie Klassen, Grafikausgaben und Datenbankzugriff wurden auch noch erwähnt.


Autor: Patrick Bucher (paedubucher)
Datum: 26-07-2004, 13:26:19
Referenzen: Jetzt lerne ich Visual Basic, Markt und Technik Verlag, ISBN: 382726569X
Schwierigkeit: Anfänger
Ansichten: 133523x
Rating: 9.88 (8x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Syntax

Die Syntax in Visual Basic sieht etwas weniger kompliziert und verschachtelt aus, als bei von C abgeleiteten Sprachen. Klammern werden in VB nur sehr selten verwendet, z.B. um Bedingungen zu verschachteln. Ausserdem ist es wichtig, dass man jeden Befehl mit einem Zeilenumbruch abschliesst und nicht etwa mit einem ";". Ausserdem ist es wichtig, alles getrennt zu schreiben; z=x+y würde so nicht funktionieren. Visual Basic korrigiert den Ausdruck jedoch sofort nach anwählen einer anderen Programmzeile in: z = x + y Syntaxfehler können in Visual Basic also so gut wie unmöglich auftauchen, da sie automatisch korrigiert werden.

Ereignisse

Sehr wichtig ist es zu wissen, dass Visual Basic Ereignisorientiert ist. D.h. alle Befehle, die ein Programm ausführt sind durch ein Ereignis verursacht. Jedes Steuerelement hat seine eigenen Ereignisse. Hier ein paar grundlegende Ereignisse im Überblick

Ereignis Tritt auf, wenn Steuerelemente
Click das Steuerelement angeklickt wird. Alle sichtbaren Steuerelemente
Got/Lost-Focus das Steuerelement den Fokus erhält, bzw. verliert. Alle sichtbaren Steuerelemente
Mouse/Key-Down eine Taste runtergedrückt wird Alle sichtbaren Steuerelemente
Mouse/Key-Press eine Taste gedrückt und wieder losgelassen wird. Alle sichtbaren Steuerelemente
Mouse/Key-Up die Taste wieder losgelassen wird Alle sichtbaren Steuerelemente
Load Das Formular geladen wird Formular


Nachdem ein Formular geladen wurde, passiert zuerst mal nichts. Visual Basic geht in die Warteschleife über. Nun muss eine Prozedur aufgerufen werden. Dies passiert in einem VB meistens, wenn eine Schaltfläche angeklickt wurde. Das kann aber auch ein LostFocus Ereignis sein...

Kein Formular – kein Programm?

Visual Basic Programme müssen nicht zwingend ein Formular besitzen. Man kann auch einfach eine Prozedur namens Main programmieren, welche beim Programmstart ausgeführt wird.

Kommentare

Kommentare können dazu benutzt werden, den Programmcode auszukommentieren, d.h. näher zu beschreiben. Man kann Kommentare jedoch auch dazu einsetzten, einen bestimmten Teil eines Programms nicht zu kompilieren. Der Programmcode bleibt dabei in der Quellcodedatei erhalten. Kommentare werden in VB mit dem unscheinbaren Zeichen ’ gemacht. Mit // oder /* */ kann man in VB keine Kommentare machen.

Objekte

Ein Objekt ist in den meisten Fällen ein Steuerelement. Dazu kommt noch das Objekt "Me", was soviel bedeutet wie: "Dieses Formular".

Methoden

Eine Methode ist ein Befehl, der sich auf das aufgeführte Objekt bezieht. Eine Methode wird folgender maßen aufgeführt: Me.Cls Diese Methode leert die Innenfläche des Formulars. Methoden werden durch einen "." Getrennt vom Objekt aufgeführt Visual Basic an sich kennt keine Befehle, korrekt sind diese nur Methoden vom Objekt VBA. Falls man eine Funktion z.B. gleich wie einen VB-Befehl benannt hat, kann man den VB-Befehl folgender maßen aufrufen:

VBA.Befehl 
Eigenschaften

Eine Eigenschaft ist wie der Name schon sagt, eine Eigenschaft eines Objekts. Die Syntax entspricht der Syntax einer Methode, mit dem Unterschied, dass jeder Eigenschaft ein Wert zugewiesen wird. lblLabel1.caption = "Das ist ein Bezeichnungsfeld". Die Caption Eigenschaft eines Labels erhält den Wert "Das ist ein Bezeichnungsfeld".

Variabeln

Deklaration von Variabeln:

Bei jedem Programm sollte man "Option Explicit" in die erste Zeile schreiben. Durch diesen Befehl müssen alle Variabeln in einem Programm deklariert werden.

Es gibt drei Möglichkeiten um eine Variable zu deklarieren: Dim [Variabelnname] Als [Datentyp]
  • Normale Deklaration in einer Subroutine Private [Variabelnname] As [Datentyp]
  • Deklaration einer Variable, die nur in der lokalen Funktion gültig ist Public [Variabelnname] As [Datentyp]
  • Deklaration einer "globalen" Variable, d.h. dass sie von allen Prozeduren und Funktionen angesprochen werden kann,
Datentypen

Datentyp Wertebereich
Boolean 0 (false) oder 1 (true)
Byte Ganze Zahlen von 0 bis 255
Integer Ganze Zahlen von –32'768 bis 32’767
Long Ganze Zahlen von -2'147'483'648 bis 2'147'483’647
Single Von –3.402823E38 bis –1.401298E-45 und von 1.401298E-45 bis 3.402823E38
Double Single mit etwa 300 Nachkommastellen
Decimal Ganze Zahlen mit 28 Nachkommastellen bis etwa 500'000
Currency Ganze Zahlen mit 4 Nachkommastellen. Von –922'337'203'685'477.5808 bis 922'337'203'685'477.5807
Date Datum von 01.01.100 bis 31.12.9999
String Bis 65500 Zeichen
Variant Bis 2'000'000'000 Zeichen
Object Referenz zu einem Objekt


Arrays

Eine herkömmliche Variable kann nur einen Wert speichern. Um mehrere Werte zu speichern müsste man also mehrere Variabeln deklarieren. Was tut man aber, wenn man nicht weiss, wie viele Werte der Benutzer eingibt (z.B. in einem Taschenrechner)?. Dafür gibt es sogenannte Arrays oder zu deutsch, Feldvariabeln.

Deklaration

Ein Array wird mit den selben Befehlen deklariert, wie eine "normale" Variable. Es ist jedoch wichtig, einen Wertbereich anzugeben. Dieser Wert wird in Klammern nach dem Variabelnamen aufgeführt.

Dim meinArray(0 to 199)
Obiges Beispiel deklariert eine Variable namens meinArray das 200 Werte entgegen nehmen kann. Das Schlüsselwort to kann man sich auch sparen. Folgende Deklaration hat die selbe Funktion:

Dim meinArray(199)
Wenn nur die Grösse angegeben wurde, geht VB davon aus, dass man die Felder 0 bis 199 deklarieren will. Es gilt jedoch als "sauberer Programmierstil", wenn man die Null auch angibt.

Werte zuweisen

Beim Zuweisen eines Wertes ist es wichtig, dass man den Index angibt. Ansonsten hat dies eine Fehlermeldung zur Folge.

MeinArray(0) = "Behälter 0"

MeinArray(1) = "Behälter 1"
Für den Index können natürlich auch Variabeln verwendet werden. Bei diesem Beispiel wird das Array mithilfe einer Schleife mit Werten abgefüllt.

Dim meinArray(1 To 1000)

Dim n as Integer

n=1

Do while n<=1000

      meinArray(n) = n

      n = n + 1

Loop
Mehrdimensionale Arrays

Arrays können auch mehrere Dimensionen haben. Das sollte man sich am besten wie ein Schachbrett vorstellen, wobei jedes Häuschen ein Behälter ist und das ganze Schachbrett für das Array steht. Mehrdimensionale Arrays werden so deklariert:

Dim meinArray(1 to 8, 1 to 8)
Das Array hat nun 64 Felder. Die Wertzuweisung erfolgt nun, indem man die "Koordinaten" angibt.

meinArray(5,3) = "Das Feld 5-3"
Die Array-Funktion

Wenn man ein Array von Hand abfüllen will, muss jedes Feld mit einem Wert aufgeführt werden. Um Tipparbeit zu sparen, kann man sich der Array-Funktion bedienen.

Dim Mannschaften(0 to 32)

Mannschaften = Array("FC-Luzern",
"FC-Basel", "GC")
Der Index wird hier automatisch vergeben.

Dynamische Feldvariabeln

Eine dynamische Feldvariable kann ihre Größe während der Laufzeit ändern. Angenommen, man deklariert ein Array mit 200 Behältern, so verschwendet man Platz, wenn man nicht alle Behälter ausnützt. Wenn man aber mehr als 200 Werte zuweisen will, wird es einen Laufzeitfehler geben. Eine dynamische Feldvariabel wird so deklariert:

Dim meinArray()
In der Prozedur muss man dem Array jedoch die Anzahl der Behälter angeben. Das tut man mit dem ReDim Befehl.

ReDim meinArray(0 to 136)
In der Praxis verwendet man jedoch keine konkreten Werte, sondern weißt die Anzahl Behälter mit Variabeln zu, die durch verschiedene Bedingungen ihren Wert erhalten.

Grenzen eines Arrays

Die Unter- und Obergrenze eines Arrays stellt man mit folgenden Befehlen fest:

Lbound(Arrayname)

Ubound(Arrayname)
Statische Variabeln

Wichtig ist es, zu wissen, dass eine Variable in der Laufzeit ihren Wert verlieren kann. Das ist genau dann, wenn du Prozedur verlassen wird. Die Variable verliert ihren Weg. Wird die Prozedur wieder aufgerufen, bekommt die Variable wieder den Wert 0. Um das zu verhindern, muss man den "Static" Befehl zur Variabelndeklaration verwenden.

Static intZahl As Integer
Berechnungen

Allgemeines

So kann eine Berechnung in VB aussehen:

z = x + y
Das Resultat einer Berechnung wird immer links geschrieben! Dem Ausdruck links vom Gleichheitszeichen wird der Wert des Ausdrucks rechts vom Gleichheitszeichen zugewiesen. In der Mathematik ist folgende Operation unmöglich:

Z = Z + 1
In Visual Basic ist sie jedoch erlaubt, da = der Zuweisungsoperator ist (jedoch auch der Vergleichsoperator, kein == wie in C, C++ oder PHP).

Rechenoperationen

Zeichen Erklärung
+ - * / Grundoperationen
- Vorzeichen "Minus"
\ Integerdivision
Mod Division mit Rest
=, <>, <, >, <=, >= Vergleichsoperatoren
NOT à logische Verknüpfungen
AND
OR
XOR
EQV
IMP


Zeichenketten

Allgemeines

Eine Zuweisung einer Zeichenkette muss immer mit Anführungszeichen erfolgen!

Textvariable = "Das ist ein Text"
Verschiedene Textteile könne mit & verkettet werden:

Textvariable = "Das" & "Ist" &
"ein" & "Text: " & vbCrLf _

& strText & " Ende des Textes"
In Zeichenketten können natürlich auch Variabeln vorkommen, in diesem Falle die Variable strText. Text muss immer mit "" abgegrenzt werden. VbCrLf ist eine VB-Konstante, die für einen Zeilenumbruch steht. Das _ am Ende einer Zeile bedeutet, dass der Befehl auf der nächsten Zeile fortgesetzt wird, da man in VB kein ; an das Ende jedes Befehls stellt, wie bei C, C++ oder PHP.

Msg- und InputBoxes

Allgemeines

Syntax zum aufrufen einer MsgBox:


MsgBox(Prompt[, Schaltflächen][,
Titel][, Hilfedatei, Kontext])
Die MsgBox (MessageBox – Mitteilungsbox) dient nur zur Ausgabe einer (Fehler-)Meldung. Man kann jedoch mehrere Schaltflächen verwenden und abfragen, welche Schaltfläche gerade gedrückt worden ist. Hier ein Beispiel dazu:


Antwort = MsgBox(Prompt:="Möchten sie
abbrechen?", _ Buttons:=vbIconExclemation & _ VbIconYesNo,
Title:="Frage...")

 
Die Variable "Antwort" bekommt in diesem Fall von Windows Rückmeldung, welche der beiden Tasten gedrückt wurde. So lassen sich Abfragen generieren, wie z.B. in den Office Programmen; "Sind sie sicher, dass sie das Programm beenden wollen?

Syntax zum aufrufen einer InputBox:

InputBox(Prompt[, Titel][, Default][,
xpos][, ypos][. helpfile, context])

 
Mit der InputBox kann man den Benutzer zu einer Eingabe auffordern. Die InputBox hat neben den Buttons auch ein Textfeld, wo der Benutzer Werte eingeben kann. Hier ein kleines Beispiel, um einer Textvariabeln einen Wert zuzuweisen:

Dim text As String

text = InputBox(Prompt:="Bitte
geben Sie einen Text ein", _ Title:="InputBox")
 
Die Variable text wird deklariert. Mit dem 2. Befehl wird ihr der Wert der Input-Box zugewiesen.

Entscheidungen

Allgemeines

Der Computer kann keine eigenen Entscheidungen treffen, er kann nur Auswerten ob eine Bedingung zutrifft oder nicht! (Ja/Nein)

Die IF Schleife

Die Syntax für eine IF Schleife sieht folgender maßen aus:

If [Ausdruck] Then [Befehl]
 
So sähe ein pratkisches Beispiel aus:

If Vermögen = 0 Then KreditAufnehmen
 
Falls das Vermögen null ist, wird ein Kredit aufgenommen. Der Ausdruck kann mit folgenden Vergleichsoperatoren mit einem Wert verglichen werden:

=, <>, <, >, <=, >=
 
Ein Vergleich "Ist Gleich" kann bei Visual Basic mit dem Gleichheitszeichen (=) durchgeführt werden, man braucht nicht ==zu schreiben, wie in C, C++ oder PHP.

Man kann verschiedene Ausdrücke mit den logischen Operatoren "OR" oder "AND" verknüpfen.

If Vermögen = 0 AND Bargeld = 0 Then
KreditAufnehmen
 
In diesem Beispiel wird nur ein Kredit aufgenommen, wenn man kein Vermögen mehr hat und das Portemonnaie leer ist!

If Vermögen = 0 OR Bargeld = 0 Then
KreditAufnehmen
 
Bei obigem Beispiel wird ein Kredit aufgenommen, wenn man kein Vermögen mehr hat, oder wenn das Portemonnaie leer ist!

Punkt vor Strich!

Was in der Mathematik eine Punktoperation ist, ist in Visual Basic der AND Operator! Dieser wird zuerst ausgewertet!

Mathematik:

         A * B + C * D
Visual Basic:

         A AND B OR C AND D
Man könnte das auch mit Klammern verdeutlichen:

(A AND B) OR (C AND D)
 
So wird der Ausdruck ausgewertet.

Wenn man Strings miteinander Vergleichen will, muss man den Vergleichswert in "" setzen, falls es sich nicht um eine Variable handelt.

Falls man nur ein Teil des Strings vergleichen will, so hat VB die Instr-Funktion bereit. Syntax:

 

If Instr([Variable], "[Vergleiswert]")
> 0 then [Anweisung]
 
Falls die Variable einen Teil des Vergleichswerts enthält, so wird die Anweisung durchgeführt. Mit dem > 0 Vergleich wird ermittelt, an welcher Stelle der Variable der Vergleichswert beginnt. Falls der Wert 0 ist, beginnt der Vergleichswert gar nie – der Vergleichswert ist nicht in der Variable enthalten. In diesem Fall könnte man den Vergleich > 0 aber auch weglassen, was man bei anderen Entscheidungen auch machen könnte, so wäre es aber etwas unüberischtlich und hätte nur bei diesem Beispiel einen Vorteil.

Mehrere Befehle ausführen

Wenn mehrere Befehle ausgeführt werden sollen, so muss man mitteilen, wann der Befehlsclock fertig sein soll. Dies tut man mit dem End If Befehl. die Syntax:


If [Bedingung] = [Wert] Then

Befehl 1

Befehl 2

Befehl 3

End if

  
Es werden nun alle Befehle zwischen Then und End If durchlaufen.

Der Else Befehl

Bisher wurden nur Aktionen ausgeführt, falls eine Bedingung zutrifft. Was passiert aber, wenn die Bedingung nicht zutrifft? – Mit dem Else Befehl kann der Sonst-Fall angegeben werden! Hier die Syntax:


If [Bedingung] = [Wert] Then

Befehl 1

Befehl 2

Befehl 3

Else

Befehl 4

Befehl 5

Befehl 6

End if
  
Die Befehle zwischen Else und End if werden nur dann durchgeführt, wenn die Bedingung nicht zutrifft!

Entscheidungen könne beliebig verschachtelt werden. Dies kann z.B. so aussehen:


If [Bedingung1] = [Wert] Then

If [Bedingung2] = [Wert] Then

Befehl 1

Else

      Befehl 2

Else

If [Bedingung3] = [Wert] Then

            Befehl 3

      Else

            Befehl 4

End if
  
Wenn die Bedingung 1 zutrifft, so wird Bedingung 2 geprüft. Wenn Bedingung 2 zutrifft, wird Befehl 1 ausgeführt, ansonsten Befehl 2. Das ganze analog, wenn die Bedingung 1 nicht zutrifft (beim Else-Fall).

Das Verschachteln von Bedingungen ist schneller ausgeführt als das Verknüpfen von Bedingungen mit OR oder AND Operatoren! Zudem ist es auch übersichtlicher.

Der ElseIf Befehl

Wenn man eine verschachtelte Bedingung hat, aber keine Befehle für den Else Fall vorgesehen hat, ist die ElseIf Schleife angebracht. Mit der ElseIf Schleife kann eine zweite Bedingung geprüft werden:


If [Bedingung] = [Wert] Then

Befehl 1

Befehl 2

Befehl 3

ElseIf [Bedingung] = [Wert] Then

Befehl 4

Befehl 5

Befehl 6

Else:

Befehl 7

Befehl 8

Befehl 9

End if

   
Für den ElseIf Fall muss natürlich auch eine Bedingung angegeben werden! Man kann auch mehrere ElseIf Abfragen auf gleicher Ebene hintereinander ausführen, dafür ist der "Select Case" Befehl aber sauberer (siehe weiter unten).

Der GoTo Befehl

Mit dem GoTo Befehl kann man jederzeit an eine beliebige Stelle einer Prozedur hüpfen. Das ganze sieht dann etwa so aus:


Anfang:

Befehl 1

Befehl 2

Befehl 3

GoTo Anfang
   
Die Befehle 1-3 werden ausgeführt. Der GoTo Befehl teilt dem Programm mit, dass es nach oben hüpfen soll. Diese Schleife wird unendlich mal durchlaufen.

Der GoTo Befehl gilt als "unsauberer" Programmierstil! Heutzutage verwendet man statt dem GoTo Befehl Funkionen und Subroutinen, die jederzeit aufgerufen werden können.

Der Select Case Befehl

Mit dem "Select Case" Befehl kann eine Reihe von Fällen geprüft und die jeweiligen Befehle ausgeführt werden. Hier die Syntax:


Select Case [Ausdruck]

      Case Fall1

            Befehle

      Case Fall2

            Befehle

      Case Else

            Befehle

End Select

    
Hier ein praktisches Beispiel dazu:

Select Case Zahlen

Case  Is < 0

            MsgBox Prompt:="Eine Zahl,
die kleiner ist als 0"

Case  Is = 0

            MsgBox
Prompt:="Die 0"

      Case 1 To 9

            MsgBox Prompt:="Eine Zahl
von 1 bis 9"

      Case 10 To 19

            MsgBox Prompt:="Eine Zahl
von 10 bis 19"

      Case Else

            MsgBox Prompt:="Irgendeine
andere Zahl!"

End Select
    
Zum Vergleich ist stets ein Is vor den Vergleichsoperator und den Vergleichswert zu setzen. Bei Wertereichen ist das nicht notwerndig.

Optionsfelder und Kontrollkästchen

Entscheidungen lassen sich besonders gut mit zwei Steuerelementen verbinden - mit dem Kontrollkästchen und dem Optionsfeld. Der Unterschied zwischen diesen beiden Steuerelementen ist folgender:

In einem Formular/Rahmen kann immer nur eines von mehreren Optionsfeldern aktiv sein, jedoch können mehrere oder kein Kontrollkästchen aktiviert sein.

Die wichtigste Eigenschaft dieser Steuerelemente ist "value". Wenn ein Optionsfeld aktiviert ist hat es den Wert "true", ein aktiviertes Kontrollkästchen hat jedoch den Wert "1". Es ist jeweils die exakte binäre Logik, der Programmierer muss diesen Unterschied jedoch kennen!

Programmierschleifen

Allgemeines

Eine Schleife ist eine Zusammenfassung von Befehlen, die eine bestimmet Anzahl nacheinander ausgeführt werden. Visual Basic kennt folgende Schleifen:
  • Die "For-Next" Schleife
  • Die "Do-Loop" Schleife
  • Die "For-Each" Schleife
Hierbei untescheidet man von "kopf- und fussgesteuerten" Schleifen.

Eine kopfgesteuerte Schleife wird nicht durchlaufen, wenn die Bedingung nicht zutrifft – sie enhält die Durchlaufbedingung am Anfang!

Die "For-Next" Schleife ist kopfgesteuert! Unlogischerweise wird folgende Schleife einmal durchlaufen:


For n = 0 to 0

      Befehle

Next
Eine fussgesteuerte Schleife wird mindestens einmal durchlaufen. Wenn am Ende die Abbruchbedingung zutrifft, so wird sie nicht mehr durchlaufen, ansonsten wird sie wieder durchlaufen.

Die "For-Next" Schleife

Hier muss ein Startwert, ein Endwert und manchmal auch ein Schrittwert eingegeben werden. Syntax:


For [Zählervariable] = StartWert To
EndWert Step [Schrittwert]

      [Befehle]

Next

 
Hier ein praktisches Beispiel:


For n = 1 to 10

      X = X + 1

Next
 
Die Schleife wird für Werte von n = 1 bis 10 durchgeführt. Da keine Schrittgrösse angegeben wurde, ist diese 1. Falls X den Startwert 0 hat, so ist der Endwert 10 – Die Variable wird 10 mal durchlaufen. Falls man den Schrittwert "Step 0.5" angeben würde, hätte X einen Endwert von 20!

Achtung: Das Zählen in 0.1 Schritten ist sehr gefährlich, da der VB-Compiler bei float Zahlen eine gewisse Ungenauigkeit hat! Diese stört zwar nicht gross bei Berechnungen, für Schleifen sollte man aber immer Ganzzahlen oder den Currency-Datentyp verwenden!

Die "Do-Loop" Schleife

Bei der Do-Loop Schleife gibt es keinen Schleifenzähler. Die Anzahl der Durchläufe werden in der Abbruchbedingung angegeben. Syntax:


Do while|until [Abbruchbedingung]

      [Befehle]

Loop
Die Do-Loop Schleife wird solange durchlaufen, bis die Abbruchbedingung eintrifft. Bei while wird die Schleife solange durchlaufen, wie die Bedingung wahr ist. Bei until wird die Schleife solange durchlaufen, wie die Bedingung falsch ist.


Do while n < 10

      N = n + 1

      Befehl 1

Loop
Befehl 1 wird solange durchgeführt, bis n nicht mehr < 10 ist. Falls keine Abbruchbedingung steht, wird die Schleife unendlich oft durchlaufen. Man kann die Schleife jedoch auch in der Mitte verlassen.

 

Do while

      n = n + 1

      If n > 10 then Exit Do

      Befehl 1

Loop

Die Do Loop Schleife kann auch mit einer "Until-Bedingung” gesteuert werden!


Do until n > 10

      n = n + 1

      Befehl1

Loop
"While" und "until" könne auch nach dem "loop" Befehl aufgeführt werden – so macht man aus einer kopfgesteuerten- eine fussgesteuerte Schleife!
Der Unterschied zwischen while und until ist folgender: Die while-Schleife wird solange durchlaufen, wie die Bedingung wahr ist. Die until-Schleife wird solange durchlaufen, wie die Bedingung falsch ist!


Do

      Befehle

Loop [while|until Abbruchbedingung]
Schleifen verlassen

Falls keine Abbruchbedingung angegeben wurde, läuft die Schleife unendlich durch. Man kann aber eine Schleife auch im inner mit einer Abbruchbedingung versehen. Dazu stehen folgende Befehle zur Verfügung:

 

Exit Do

Exit For

Exit Function

Exit Property

Exit Sub
Diese Befehle warden häufig mit einer "If-Abfrage” im innern einer Schleife aufgeführt:

 

Do

      n = n + 1

      If n > 10 Then Exit Do

Loop

 
Die Schleife wird verlassen, wenn n grösser als 10 ist.

Listen- und Kombinationsfelder

Allgemeines:

Beide Steuerelemente haben die Eigenschaft, dass sie mehrere Texteinträge zur Verfügung stellen. Die Hauptunterschiede zwischen diesen beiden Steuerelementen sind folgende:
  • Ein Listenfeld hat eine feste Anzahl von Einträgen – mit dem Kombinationsfeld kann man alternatie Einträge mit dem integrierten Textfeld machen.
  • Bei einem Listenfeld können auch mehrere Einträge ausgewählt werden, falls die Eigenschaft "MultiSelect" auf "True" ist. Das Kombinationsfeld lässt nur einen selektierten Eintrag zu. Mehrspaltige Darstellung wird nur bei Listenfeldern unterstützt.
  • Das Listenfeld eignet sich gut für Sortierroutinen, das es die entsprechende Eigenschaft bereits besitzt. Dafür sparen Kombinationslisten Platz und sehen auch etwas schöner aus.
Beide Steuerelemente sind wie "Array’s" zu behandeln. Das heisst, dass jeder Texteintrag einen Index besitzt.

lstListe.List([0 – 32’767]) = "Text"
 
Einträge hinzufügen

Der Index wird in Klammern nach der Eigenschaft aufgeführt. Neue Einträge bring man mit der "AddItem" Methode in die Liste:


lstListe.AddItem = "neuer Eintrag"
 
Das Abfüllen kann auch mit einer Schleife vereinfacht werden. In diesem Beispiel werden Werte von 1 bis 100 in die Liste eingefügt. Neue Einträge werden jeweils an das Ende der Liste gesetzt. Texteinträge kann man auch mit der "Sorted" Eigenschaft der Liste sortieren lassen.


For n = 1 to 100

      LstListe.AddItem  n

Next
 
Man kann aber auch die Position in der Liste selber wählen:

 

lstListe.AddItem "Text", 99
 
Der Wert "Text” wird an Stelle 100 der Liste gespeichert.

Einträge entfernen

Einträge können mit der "RemoveItem" Methode entfernt werden:


lstListe.RemoveItem (23)

  
Hier wird der Eintrag an Stelle 24 der Liste entfernt. Man kann auch sämtliche Einträge auf einmal löschen, dazu gibt es die "Clear" Methode.


lstListe.Clear

   
Auswahl von Einträgen

Die Zuweisung des selektierten Listeneintrages wird folgendermassen an eine Variable weitergegeben:

 

Variable = lstListe.List([lstListe.Index])

    
Das Aufführen der Liste vor dem Index ist hier nicht zu vergessen!

Um zu erfahren, welche Einträge bei einer Mehrfachauswahl ausgewählt wurden, steht die "Selected" Eigenschaft zur Verfügung. Mit folgender Schleife wird im Debugfenster angezeigt, welche Einträge ausgewählt sind:


For n = 0 to lstListe.ListCount – 1

      If lstListe.Selected(n) = true then

            Debug.Print
lstListe.List(n)

      End If

Next

 
    
Mehrfachauswahl von Listen

Damit man mehrere Einträge aus einer Liste auswählen kann, muss die Eigenschaft "MultiSelect" den Wert 1 haben. Wenn diese Eigenschaft den Wert 2 hat, so kann man mehrere Einträge mit gedrückter Mausttaste anwählen.

Um zu erfahren, welche Einträge ausgewählt sind, genügt die "Selected" Eigenschaft nicht mehr, da sie nur den Wert des zuletzt ausgewählten Eintrages zurückgibt. Hierzu muss man eine kleine Schleife programmieren. Die selektierten Einträge werden hier ins Debug-Fenster geschrieben.

For n = 0 to lstListe.ListCount – 1

      If lstListe.Selected(n) = true
Then

            Debug.Print
lstListe.List(n)

      End if

Next

     
Werte mit Steuerelementen eingeben

Allgemeines

Das Einstellen von Werten mit Steuerelementen hat einige Vorteile. So kann man bei einen Schiebebalken nur eine bestimmte Anzahl von Werten bestimmen. Eine Eingabeprüfung erübrigt sich also. Oft ist es auch benutzerfreundlicher, als wenn der Benutzer in ein Textfeld eintragen muss. Der Benutzer weiß zudem, was Maximal- und Minimalwert sind. VB hat 3 gute Steuerelemente auf Lager:
  • Die horizontale/vertikale Bildlaufleiste
  • Das AufAb Steuerelement
  • Den Schieberegler (Zusatzsteuerelement, Windows Common Controls 6.0)
Die horizontale/vertikale Bildlaufleiste

Mit einer Bildlaufleiste kann man einen Wert in einem bestimmten Bereich einstellen. Den aktuellen Wert kann man mit der "Value" Eigenschaft abfragen.

Eigenschaft Bedeutung
LargeChange Legt fest, wie groß die Veränderung des Wertes bei jedem klicken in die Einstellfläche sein soll.
SmallChange Legt fest, wie groß die Veränderung des Wertes bei jedem klicken auf ein Pfeilsymbol sein soll.
Max Maximalwert
Min Minimalwert
Value Startwert, aktueller Wert des Balkens


Zu beachten:
  • Der Wert kann zwischen –32768 und 32767 liegen
  • SmallChange und LargeChange dürfen nicht negativ sein
Das wichtigste Ereignis eines Balkens ist das "Change" Ereignis. Es wird jedes Mal ausgelöst, wenn der Benutzer den Wert verändert.

Prozeduren

Allgemeines

In VB gibt es keinen Hauptteil, wie z.B. in C/C++. Alle Befehle befinden sich in VB in einer Prozedur oder einer Funktion.

Syntax

Die Syntax von Prozeduren ist:

Sub Name (Argumente)

      Befehle

End Sub
Definition

Eine Prozedur kann man bequem unter "Extras > Prozedur hinzufügen" definieren. Man kann jedoch einfach eine Prozedur ins Programmcodefenster eintragen.

Prozeduraufruf

Jede Prozedur hat ihren eigenen (eindeutigen) Namen. Um eine Prozedur aufzurufen, braucht man nur den Namen dieser Prozedur als Befehl hinzuschreiben. Man kann das auch mit dem Call Befehl tun, den man vor den Prozedurnamen stellt.

Call Prozedurname

Argumente

Das hier ist eine kleine Prozedur, um die Caption-Eigenschaft eines Steuerelementes zu ändern:

Sub CaptionVerändern ()

      lblLabel.caption
= "Text”

End Sub
Wenn man aber andere Steuerelemente auch verändern will, so muss man Argumente einfügen. Argumente sind Werte, die beim Aufruf einer Prozedur übergeben werden.

Sub CaptionVerändern (Label As Control)

      Label.caption = "Text”

End Sub
Um die Prozedur auszuführen, braucht man jedoch noch einen Wert für das Argument Label. Dieses Argument bekommt seinen Wert erst bei der Ausführung. Der Prozeduraufruf muss so aussehen:

CaptionVerändern Label:="lblLabel879"
Hier noch ein etwas komplexeres Beispiel:

Der Prozedur "Ausrechnen" werden 3 Argumente übergeben. X, Y und Ausgabe.

Private Sub cmdAusrechnen_Click()

    Ausrechnen X:=txt1.text,
Y:=txt2.text, Ausgabe:=txtErgebnis

End Sub
Nun kann die Prozedur Ausrechnen Z aus X und Y berechnen und gibt sie an ein Textfeld aus. Dieses Textfeld wurde im Argument "Ausgabe" übergeben.

Sub Ausrechnen(X As Integer, Y As
Integer, Ausgabe As Control)

    Dim Z As Integer

    Z = X + Y

    Ausgabe.text = Z

End Sub
Optionale Argumente

Argumente können auch Optional sein. Dafür muss man nur das Schlüsselwort "Optional" vor jedes Argument stellen. Da es aber im inneren der Prozedur Probleme geben könnte, wenn ein Argument keinen Wert erhalten hat, sollte man besser einen Default-Wert setzen, falls ein optionales Argument keinen Wert hat. Dafür ist die "IsMissing" Funktion zuständig:

Function (Optional intZahl as Integer)

      If IsMissing(intZahl) Then

            IntZahl = 66

      End If

End Function
 
Prozeduren mit einer variablen Anzahl von Argumenten

Oft ist es nützlich, wenn die Anzahl der Argumente dynamisch ist. Dies ist z.B. bei einer Funktion nützlich, welche die Summe von x-Beliebig vielen Zahlen berechnet.

Function Summe(ParamArray Zahlenfeld())
As Long

      Dim n As Integer

      For n = 0 To Ubound(Zahlenfeld)

            Summe
= Summe + Zahlenfeld(n)

      Next n

End Function
 
Nun kann man die Summe beliebig vieler Zahlen berechnen.

 

MsgBox Prompt:="Summe: " &
Summe(100, 150, 280, 330)

MsgBox Prompt:="Summe: " &
Summe(190, 1780, 17350)
 
Wert oder Referenz?

Einer Prozedur kann man ein Argument als Wert oder als Referenz übergeben. Wenn man nichts angibt, wird der Wert als Referenz übergeben.

Wenn eine Variable als Referenz übergeben wird, so wird der Prozedur nur die Speicherstelle mitgeteilt, wo sich die Variabel befindet. Falls sich diese Variabel verändert, sieht die Prozedur den neuen Wert. Wenn man das Argument jedoch als Wert übergibt, so wird die Variabel "kopiert". Änderungen werden so nicht aktualisiert.

Um zu kontrollieren, ob ein Argument als Wert

oder Referenz übergeben wird, muss man ein Schlüsselwort voranstellen. ByVal vorangestellt bewirkt, dass das Argument als Wert übergeben wird. ByRef bewirkt, dass ein Argument als Referenz übergeben wird.

Prozedur ByVal X:=15

Prozedur ByRef X:=15
Der Gültigkeitsbereich von Prozeduren

An welchen Stellen des Programms können Prozeduren eigentlich aufgerufen werden? Wenn man nichts angibt, von überall aus. Wenn man aber eine Prozedur aus einem anderen Formular her aufrufen will, muss man den Formularnahmen vor den Prozedurnamen stellen.

Formular1.Subroutine
Um eine private Prozedur zu programmieren, muss man den "Private" Befehl voranstellen. Bei einer Globalen Prozedur ist es der "Public" Befehl.

Private Sub meineProzedur ()

Public Sub meineProzedur ()
Eingebaute Funktionen

Allgemeines

Visual Basic bietet eine große Funktionsbibliothek. Enthalten sind: Stringfunktionen, Umwandlugsfunktionen, Datumsfunktionen und natürlich Mathematische Funktionen. Die Funktionen können in der Visual Basic Hilfe nachgeschlagen werden, oder man schaut in der MSDN-Library nachschauen.

Mathematische Funktionen

Der Rückgabewert von Mathematischen Funktionen hat immer den Datentyp Double. Daher sollte man auch diesen Datentyp für die Variabeln verwenden. Um kompliziertere Berechnungen durchzuführen, sollte man sich die Mathematik-Toolbox BNALib von www.tereatech.com herunterladen.

Der Decimal-Datentyp bietet bis zu 25 Nachkommastellen. Er eignet sich also am besten für genaue Resultate. Um mit diesem Datentyp zu arbeiten, kann man aber keine Decimal-Variable deklarieren, man muss die Funktion CDec benutzen.

CDec(22/7)
Mit VB6 wurde auch eine Rundungsfunktion eingeführt. Diese heisst "Round".

intZahl = Round(curZahl)
Datumsfunktionen

Datum/Uhrzeit werden in VB im Datentyp "date" abgespeichert. Dieser Geht vom 01.01.100 bis zum 31.12.9999. Das sollte für die VB-Ära wohl reichen. Um zu überprüfen, ob ein Ausdruck ein gültiges Datum ist, kann man die "IsDate" Funktion anwenden.

If IsDate(Datum) = True Then
...
Um herauszufinden, welcher Wochentag auf ein Datum zutrifft, oder in welcher Woche ein Datum ist, kann man die DatePart Funktion verwenden. Dieser Funktion müssen zwei Argumente übergeben werden. Das erste Argument bestimmt, was herausgelesen werden soll (Anzahl Tage, Wochen, usw.). Das zweite Argument ist das Datum.

Woche = DatePart("ww", "01.01.2004")
Hier wird herausgelesen, an welcher Woche das Datum sein wird (hier Woche 1).

Manchmal will man auch herausfinden, wie viele Tage es noch dauert, bis man Geburtstag hat. Dieser Funktion muss man sogar 3 Argumente übergeben. Das erste Argument bestimmt, was herausgelesen werden soll (Anzahl Tage, Wochen, usw.). Das zweite Argument ist der Anfang der Periode , das dritte Argument das Ende der Periode.

AnzahlTage = DateDiff("d", Now,
"01.01.2005")
Die Funktion berechner die Anzahl Tage, die "Jetzt" vom 01.01.2005 trennen.

Zeichenkettenfunktionen

Um eine bestimmte Anzahl von Zeichen aus einem String rauszukopieren, hat man mehrere Funktionen zur Verfügung. Beispielstring:

Dim strText As String

strText = "Auto, Motorrad, Fahrrad"

Dim strTeil As String
Wenn man das Wort "Auto" heraustrennen will, nimmt man am besten die "Left" Funktion. Diese Funktion nimmt 2 Argumente entgegen. Den Mustertext und die Anzahl der Zeichen, die herauskopiert werden sollen.

strTeil = Left(strText, 4)
Hier wird das Wort "Auto" herauskopiert. Analog zu diesem Beispiel, die Funktion Right. Diese hat den einzigen Unterschied, dass die Anzahl der Zeichen am Ende des Strings rauskopiert werden.

strTeil = Right(strText, 4)

 
Die Variable strTeil hätte nun den Wert: "rrad”.
Um Zeichen aus der Mitte der Zeichenkette zu kopieren, eignet sich die "Mid" Funktion am besten. Das erste Argument bleibt gleich, wie bei den vorherigen Beispielen. Das Zweite Argument steht für die Stelle, wo der String beginnt. Als drittes Argument gibt man die Anzahl der Zeichen an, die ausgelesen werden sollen.


strTeil = Mid(strText, 7, 4)
 
Die Variable strTeil hat nun den Wert "Moto" bekommen.
Das ganze bringt natürlich wenig, wenn man den String nicht kennt. Wenn man den String nach einem bestimmten Wort absuchen will, muss man die "Instr" Funktion verwenden. Die Funktion nimmt als erstes Argument den abzusuchenden String entgegen, das zweite Argument ist ein String, nachdem man suchen will. Es wird die Position des Anfangs dieses Strings zurückgegeben.


intTeil = Instr(strText, "Motorrad")
 
Die Variable intTeil bekommt hier den Wert als Zahl, wo "Motorrad" beginnt. Hier hätte intTeil den Wert 7.

Wenn man ein bestimmtes Wort aus einem String heraustrennen will, aber nicht weiss, wo das Wort im String beginnt, muss man die Funktionen "Mid" und "Instr" verschachteln.


StrTeil = Mid(strText, Instr(strText,
"Motorrad"), Len("Motorrad"))
 
Die Variable bekommt hier den Wert "Motorrad" zugewiesen.

Das Null-Zeichen

Angenommen, man kopiert einen String mit einer API Funktionen irgendwoher heraus, hat dieser ein Nullzeichen am Schluss. Mit so einem String kann man in VB nicht arbeiten. Um das Nullzeichen herauszutrennen, hat VB eine Konstante namens vbNullChar bereit. So trennt man das Nullzeichen heraus:


StrTeil = Left(strText, Instr(strText,
vbNullChar)-1)
 
Dateierweiterung verändern



StrDateiname = Left(Dateiname,
Instr(DateiName, ".")) & "[neueDateiendung]"

  
Die "Left" Funktion mit der "Instr" Funktion verknüpft, liest den Dateinamen bis zum Punkt aus. Die neue Dateiendung wird hinten angesetzt.

Abfragefunktionen

Mit Abfragefunktionen kann man Variablen schnell und einfach testen. Um zu überprüfen, ob eine Variable überhaupt einen Wert hat, gibt es die IsEmpty Funktion.

If IsEmpty(Variable) = true Then

      MsgBox
Prompt:=”Die Variable hat keinen Wert”

Else

      MsgBox Prompt:="Die Variable hat
einen Wert"

End If
  
Um zu überprüfen, ob eine Variable einen numerischen Wert hat, kann man die Funktion IsNumeric verwenden.

If IsNumeric (Variable) = true Then

      MsgBox
Prompt:=”Die Variable hat einen numerischen Wert”

Else

      MsgBox Prompt:="Die Variable hat
keinen numerischen Wert"

End If
  
Umwandlungsfunktionen

Um eine Variable zu einem anderen Datentyp umzuwandeln, kann man die "C[Datentypkürzel]" Funktion verwenden.

curCurrency_Variable =
CCur(intInteger_Variable)

   
Zm mit Hexadezimalen Werten zu arbeiten, muss man nur ein & vor den Hexawert stellen.

 

IntZahl = & H3E8

    
Zufallszahl

Um eine Zufallszahl zu erstellen, braucht man die Rnd-Funktion. Hier wird eine Zufallszahl von 1 bis 100 erstellt.


Zufallszahl = Int(Rnd * 100) + 1
    
Der integer Variable wird eine Zufallszahl zugewiesen. (Rnd * 100) bewirkt, dass 100 verschiedene Werte ausgegeben werden können. Warum aber + 1? Ganz einfach, weil wir eine Zufallszahl zwischen 1 und 100 und nicht zwischen 0 und 99 haben wollen. Int muss vorangestellt werden, wenn wir eine Ganzzahl haben wollen.

Benutzeroberflächen

Steuerelementfelder

Wenn man ein Steuerelement mit Copy-Paste kopiert, erhält man eine Meldung; "Wollen sie ein Steuerelementfeld erstellen?". In einem Steuerelementfeld haben alle Steuerelemente den gleichen Namen und die gleichen Eigenschaften (d.h. sie sind natürlich auch vom selben Typ). Da diese Steuerelemente aber den selben Namen haben, werden sie durch ihren "Index" unterschieden. Angenommen, man kopiert ein Steuerelement "txtEingabe" 9 mal, sind 10 Steuerelemente mit dem gleichen Namen auf dem Formular vorhanden. Wenn man jedem Steuerelement nun etwas zuweisen will, tut man das mithilfe des Index.


txtEingabe0.text = "Ich bin
Steuerelement 0"

txtEingabe1.text = "Ich bin
Steuerelement 1"

...

txtEingabe9.text = "Ich bin
Steuerelement 9"

     
Hier wäre eine For-Schleife angebracht:



For n = 1 to 9

      txtEingabe(n).text = "Ich bin
Steuerelement " & n & "."

Next

      
Wenn man sich nicht sicher ist, wo der Index der Steuerelemente liegt, kann man mit den Eigenschaften "LBound" und "UBound" die Grenzwerte feststellen.


For n = txtEingabe.Lbound to
txtEingabe.UBound

      txtEingabe(n).text
= "Ich bin Steuerelement " & n & "."

Next

       
Auch bei Ereignissen muss der Index angegeben werden:


Private Sub cmdButton_Click(Index As
integer)

      MsgBox
Prompt:=”Sie haben Button Nr " & Index & " gedrückt.”

End Sub

        
Mehrere Formulare benutzen

Kleinere Programme kann man bequem auf ein Formular bringen. Es wäre sogar kontraproduktiv, wenn man ein kleines Programm auf mehreren Formularen verteilen würde. Bei grösseren Projekten sind mehrere Formulare alleine schon wegen des Platzbedarfs erforderlich.

Ein neues Formular wird über "Projekt > Formular hinzufügen" hinzugefügt. Es gibt bereits ein paar Formularmuster zur Auswahl, z.B. ein Info-Formular. Falls man eigene Formulare öfters benutzt, sollte man sie im Ordner "\Template\Forms" abspeichern. Wenn man das Projekt nun ausführt, wird aber nur das erste Formular angezeigt. Um ein weiteres Formular aufzurufen, gibt es die "Show" Methode.

frmZweitesFormular.Show
Um das Formular verschwinden zu lassen, gibt es die "Hide" Methode, die das Formular nicht schliesst, sondern nur Unsichtbar macht. Wenn das Formular aber ganz geschlossen werden soll, brauch man den Befehl "Unload Me".


frmZweitesFormular.Hide

Unload me
Modal – nicht modal

  • Ein modales Formular blockiert alle anderen Fenster. Solange dieses Formular angezeigt ist, kann nichts gemacht werden.
  • Ein nicht modales Formular kann einfach zur Seite geschoben werden, man kann bequem mit einem anderen weiterarbeiten.
  • Um zu steuern, wie ein Formular angezeigt wird, muss man der "Show" Methode ein Argument "Modal" übergeben. Ansonsten wird das Formular nicht Modal angezeigt.


frmFehlermeldung.Show Modal:=vbModal

frmInfobox.show Modal:=vbModeless
Auf Steuerelemente von anderen Formularen zugreifen

Der Zugriff auf Steuerelemente von anderen Formularen ist kein Problem. Man braucht nur den Namen des Formulars vor das Steuerelement zu stellen.


frmZweitesFormular.txtEingabe.text =
"Ich bin auf dem 2. Formular!"
Der Zugriff auf Variabeln aus einem anderen Formular, funktioniert nur, wenn es sich um öffentliche Variabeln handelt.

 

txtEingabe.text =
frmZweitesFormular.intPublicZahl
Wenn man ein anderes Formular anspricht, wird es geladen, aber nicht angezeigt.

Der With-Befehl

Oft muss man einem Objekt viele Werte für Eigenschaften zuweisen. Damit man nicht jedes Mal das Objekt aufführen muss, gibt es den "with" Befehl.

 

With txtEingabe

      .Text = "Ich bin txtEingabe"

      .BackColor = vbBlack

      .ForeColor = vbWhite

      .SetFocus

End With
Es können nicht nur Eigenschaften, sondern auch Methoden aufgeführt werden.

MDI-Benutzeroberflächen

Fast alle professionellen Programme sind eine MDI-Oberfläche. In einer solchen Oberfläche, gibt es ein übergeordnetes Formular, das keine Steuerelemente besitzen kann, bis auf Menü-, Status- und Symbolleiste. Alle anderen Formulare werden dann innerhalb des Hauptformulares angezeigt. Software wie "Microsoft Word" und die anderen Office Komponenten funktionieren alle nach diesem MDI-Prinzip. In diesem Hauptfenster werden sogenannte "Kindfenster" angezeigt. Diese kann man im inneren des Formulares bewegen. Wenn so ein Kindfenster maximiert wird, bleibt das Hauptfenster trotzdem noch zu sehen.

Ein MDI Formular wird über "Projekt > MDI-Formular hinzufügen" eingefügt.

Nun kann man ein weiteres leeres Formular hinzufügen. Damit es als Kindfenster angezeigt wird, muss die Eigenschaft MDIChild True sein. Wichtig beim Hauptfenster ist auch die "AutoShowChildren", welche die Kindfenster automatisch anzeigt.

Menüleisten

Ein MDI-Fenster kann keine Steuerelemente wie Buttons, Textfelder, Labels usw. enthalten. Um mit dem Programm arbeiten zu können, ist eine Menüleiste ideal. Visual Basic stellt einen Menüleisten-Editor zur Verfügung, mit diesem kann man solche Menüleisten erstellen, welche aus den Office Programmen bekannt sind. Den Menü-Editor startet man über "Extras à Menüeditor" oder über das Symbol in der Symbolleiste.

Die wichtigsten Eigenschaften im Überblick:

Eigenschaft Bedeutung
Caption Titel des Menüeintrags
Checked Legt fest, ob dem Menüeintrag ein Häckchen vorausgehen soll.
Enabled Legt fest, ob der Menüeintrag aktiviert werden soll.
Name Legt den Namen fest
Shortcut Legt fest, ob man den Menüeintrag per Tastenkombination aufrufen kann.
Visible Legt fest, ob der Menüeintrag sichtbar sein soll.


Eine Menüleiste kann nur auf ein "Click" - Ereignis reagieren. Das Präfix für Menüeinträge lautet "mnu".

Die einzelnen Schichten der Menüleiste können per Pfeiltasten verschoben werden. Die erste Schicht stellt jeweils ein Untermenü dar (Datei | Bearbeiten | Ansicht | ...). Alle tieferen Ebenen werden in diesem Untermenü angezeigt. Man kann Menüs beliebig weit verschachteln, man sollte aber nur in jedem Untermenü noch ein Untermenü machen und nicht mehr. Ein Trennstrich kann man ganz einfach machen, indem man einem Menüeintrag die Caption-Eigenschaft "-" gibt.

Dialogfenster

Oft sieht man bei Windows-Programmen dieselben Dialogfenster, womit man z.B. eine Datei speichern oder öffnen kann. Solche Dialogfenster müssen nicht programmiert werden, sie werden von VB zur Verfügung gestellt. Um diese Dialogfenster zu verwenden, muss man das Steuerelement "Microsoft Common Dialog Control 6.0" von "Projekt > Komponenten" hinzufügen. Das Steuerelement wird während der Programmausführung unsichtbar bleiben. Das Präfix lautet "dlg". Hier ein Beispiel, wie eine Datei geladen werden kann:
code> 
mnuBildLaden_Click

Dim Dateiname
as string

dlgDateiOpen.ShowOpen

Dateiname =
dlgDateiOpen.filename

End Sub
Mit dieser Prozedur kann man den Dateinamen herauslesen. Angenommen, man will ein Bild auf einem neuen Formular betrachten, kann man z.B. so vorgehen:
 
mnuBildLaden_Click

Dim F As frmBild

Dim Dateiname
as string

dlgDateiOpen.ShowOpen

Dateiname =
dlgDateiOpen.filename

Set F = New
frmBild

F.imgBild.Picture
= LoadPicture(Dateiname)

End Sub
Der Befehl "Set F = New frmBild” dupliziert das Formular frmBild. Nun wird auf dem Steuerelement imgBild das Bild geladen.

Symbolleiste

Eine Symbolleiste ist ein ideales Steuerelement für Programmbefehle, die oft verwendet werden (Datei öffnen, Datei speichern...). Für die Symbolleiste werden Bilder verwendet. Diese Bilder können nicht direkt geladen werden, sie müssen aus einer Bildliste stammen, da die Bilder ansonsten nicht mit dem Programm mitgeliefert werden.
  1. Zuerst braucht man die Steuerelementsammlung "Microsoft Common Controls 6.0".
  2. Nun muss man die Toolbar und die Bildliste auf dem MDI-Hauptformular anordnen.
  3. Die Symbolleiste hat das Präfix "sym", die Bildliste erfordert keines.
  4. Bei der Bildliste im Eigenschaftsfenster doppelklick auf "Benutzerdefiniert".
  5. Auf die Registerkarte "Abbildungen" klicken > Bild einfügen.
  6. Nun die passende Bilder für die Symbolleiste auswählen > OK.
  7. Bei der Symbolleiste im Eigenschaftsfenster doppelklick auf "Benutzerdefiniert"
  8. Bei der Auswahlliste "Image List" die Bildliste auswählen.
  9. Die Registerkarte "Schaltflächen" wählen > "Schaltfläche einfügen"
  10. für "Key" einen Schlüsselnamen eingeben
  11. Einen Wert für die Caption Eigenschaft eingeben
  12. Nun im Feld "Image" den Index für das Bild der Bildliste eingeben (Index beginnt bei 1 und nicht bei 0).
Statusleiste

Eine Statusleiste ist nicht zwingend notwendig, sie rundet aber die Oberfläche ab. Um eine Statusleiste einzufügen, muss die Steuerelementsammlung Microsoft Common Controls 6.0 in der Toolbox liegen. Nun ordnet man die Statusleiste (StatusBar) irgendwo auf dem MDI-Fenster an (Präfix: "sta"). Nun können beliebig viele Felder eingefügt werden. Die einzelnen "Panels" werden über ihren "Key" angesprochen.

 staStatusBar.Panels("[KEY]") = "Ich bin
ein einzelnes Panel"
Man muss nicht alle Panels, die man braucht, selber programmieren. Es gibt einige vorgefertigten Panels, die man im "Benutzerdefiniert"-Fenster auswählen kann (Style-Eigenschaft).

Der Zeitgeber

Der Zeitgeber ist ein unscheinbares Steuerelement in der Werkzeugsammlung. Er hat nur ein Ereignis – "Timer". Alle paar Millisekunden (interval-Eigenschaft) wird dieses Ereignis aufgerufen. Um die Uhrzeit anzeigen zu lassen, muss der Timer auf dem Formular angeordnet sein (er wird während der Laufzeit unsichtbar bleiben). Hier der Befehl, um die Uhrzeit auf einem label anzeigen zu können.


Private Sub tmrTimer_Timer()

lblUhrzeit.Caption
= Format(Time, "Long Time")

End Sub
Je kleiner das Interval list, desto genauer läuft die Uhr. Man kann zwar einen Intervall von 1 ms eingeben, der eingebaute PC-Timer hat jedoch nur einen Intervall von 53 ms. Das sollte aber an Genauigkeit reichen.

Fehler auffangen

In Visual Basic gibt es drei Arten von Fehlern:

1. Syntaxfehler
Diese Fehler sind in VB absolut harmlos. Die Benutzerumgebung korrigiert diese automatisch, man kann gar keinen Fehlerhaften Code kompilieren à Syntaxfehler können nicht zum Benutzer gehen.

2. Laufzeitfehler
Solche Fehler können in der Entwicklungsphase nicht auftreten. Sobald man das Programm startet, können diese auftreten (Deswegen: Testen). Der häufigste Laufzeitfehler ist wohl "Überlauf". Ein Überlauf entsteht dann, wenn man eine zu große Zahl an eine zu kleine Variable zuweisen will. Diese Probleme kann man mit Eingabeprüfungen auffangen. "Typen Unverträglich" kommt auch häufig vor. Dieser Laufzeitfehler entsteht, wenn man z.B. einen Buchstaben an eine Integer-Variable zuweisen will. Das Problem an den Laufzeitfehlern: Das Programm stürzt sofort ab!

3. Logische Fehler
Ein Programm kann jahrelang korrekt laufen, bis eines Tages eine Verkettung von Situationen das Programm zu fehlerhaften Ausgaben bringt. Hier muss man ausgiebig testen und überprüfen.

Laufzeitfehler abfangen

Laufzeitfehler bringen das Programm zum Absturz und beenden es, ohne das der Benutzer seine Daten abspeichern kann. In VB gibt es jedoch sog. "Fehlerbehandlungsroutinen", welche das Programm nicht zum Absturz bringen.

Der "On-Error" Befehl

Es gibt drei Arten vom "On-Error" Befehlen:

1. On Error Goto [Sprungmarke]

2. On Error Resume Next

3. On Error Goto 0

Die am meisten verwendete Variante des "On Error" Befehls ist "On Error Goto [Sprungmarke]". So kann eine Prozedur aussehen, in der ein Fehler abgefangen werden soll:
  1. Private Sub cmdButton_Click()
  2. On Error GoTo Fehlerbehandlung:
  3. Dim intZahl1 as Integer
  4. intZahl1 = txtEingabe.Text
  5. Exit Sub
  6. Fehlerbehandlung:
  7. MsgBox Prompt:="Es ist ein Fehler aufgetreten", Title:="Fehler"
  8. End Sub
Erklärungen zu den Befehlen:
  1. Wenn die Schaltfläche cmdButton angeklickt wird
  2. Bei einem Laufzeitfehler soll das Programm zu "Fehlermeldung" springen
  3. Eine Integer-Variable wird deklariert
  4. die Variable bekommt den Wert von txtEingabe
  5. Die Subroutine wird verlassen, wenn alles funktioniert hat
  6. Sprungmarke "Fehlerbehandlung"
  7. Es wird eine Fehlermeldung ausgegeben
  8. Hier ist die Subroutine auch zu Ende, wenn ein Fehler aufgetreten ist.
Entfernt man Zeile 2 des Programmcodes, wird keine Fehlerbehandlungsroutine ausgeführt. Wenn man nun eine zu hohe Zahl in das Textfeld eingibt und den Button drückt, wird es einen Laufzeitfehler geben und das Programm stürzt ab. Wenn Zeile 2 aber mitprogrammiert wurde, kommt nur eine kleine MessageBox, das Programm verlässt die Subroutine.

Err.Number

Angenommen, der Benutzer gibt bei obigem Beispiel eine zu große Zahl ein. Nun kommt immer die gleiche Fehlermeldung, es sei ein Fehler aufgetreten. Der Benutzer weiss jedoch nicht, was er anders machen soll. Um Laufzeitfehler gezielt abfangen zu können, muss man beachten, welcher Laufzeitfehler aufgetreten ist. Dazu gibt es die die VB Konstante Err.Number. Am besten programmiert man eine "Select-Case" Schleife die prüft, welcher Fehler aufgetreten ist. Hier muss man die Nummern der Laufzeitfehler kennen.

Fehlernummer Fehler Erklärung
6 Überlauf Eine Variable wird zu gross
7 Zu wenig Speicher vorhanden Es ist zu wenig RAM vorhanden
9 Index ausserhalb des gültigen Bereiches Der Index eines Arrays wurde nicht richtig definiert, man arbeitet mit undefinierten Indizes
11 Division durch 0 Es wird eine Zahl durch 0 definiert
13 Typen unverträglich Wenn man z.B. Text in eine Integer Variable speichern will
52 Dateiname falsch Wenn man mit einer Datei arbeitet, die nicht existiert.
53 Datei nicht gefunden "
71 Diskette nicht bereit Es wurde keine Diskette eingelegt
94 Verwendung von NULL unzulässig Eine Variable hat keinen Wert (den Wert [NULL])


Diese Fehler treten am häufigsten auf. Hier die Erweiterung des obigen Programmes:

 Private Sub cmdButton_Click()

On Error GoTo
Fehlerbehandlung:

Dim intZahl1
as Integer

intZahl1 =
txtEingabe.Text

Exit Sub

Fehlerbehandlung:

      Select Case Err.Number

            Case 6

MsgBox Prompt:="Die Variable ist zu gross", _ Title:="Variable zu
gross"

            Case 13

MsgBox Prompt:="Sie haben Text eingegeben", _ Title:="Typen
unverträglich"

            Case Else

MsgBox Prompt:="Irgendein Fehler", _ 

Title:="Fehler"

      End Select

End Sub
Nun wird der Benutzer gezielt auf seine Falscheingabe hingewiesen.

Fehlersuche

Um logischen Fehlern vorzubeugen, muss man oft Sachen überprüft werden, wie z.B. Werte von Variabeln. Dazu eignet sich am besten das Debug-Fenster, unten zu finden. Um den Wert von Variable intZahl auszugeben, kann man so vorgehen:


Debug.Print intZahl

 
Und schon sieht man unten im Debug Fenster die Zahl. Debug-Anweisungen werden nicht kompiliert, sie müssen also weder auskommentiert, noch gelöscht werden, bevor man eine .exe erstellt.

Mit F8 kann das Programm im Einzelschrittmodus getestet werden. Bei jedem Druck auf F8 wird der nächste Befehl ausgeführt.

Dateizugriff

Warum auf Dateien zugreifen?

Um Werte in einem Programm abspeichern zu können, verwendet man Variabeln. Wenn man aber Werte dauerhaft abspeichern will, reichen Variabeln nicht mehr aus. Sobald die Prozedur verlassen wird, verliert die Variabel ihren Wert (wenn sie nicht global ist). Ansonsten verliert sie ihren Wert spätestens dann, wenn das Programm beendet wird. Damit man Werte dauerhaft speichern kann (wie z.B. Optionen, wie ein Benutzer die Software für sich persönlich konfiguriert), muss man die Werte in Dateien abspeichern, wo man sie danach wieder herauslesen kann.

Wie funktioniert der Zugriff?

Der Dateizugriff läuft immer nach dem gleichen Schema ab:
  1. Holen einer freien Dateizugriffsnummer über die "FreeFile"-Funktion
  2. Öffnen der Datei mit dem "Open"-Befehl
  3. Zugriffsmodus auswählen (Input, Output, Append, Random, Binary)
  4. Schreiben oder Lesen der Daten (Input, Write, Get, Put)
  5. Schliessen der Dateiverbindung
In VB gibt es drei Möglichkeiten auf eine Datei zuzugreiffen:
  1. Sequentiell
    Zum abspeichern von Strings
  2. Random
    Zum abspeichern von Datensätzen
  3. Binär
    Zum abspeichern von Zahlen
Der "Open"-Befehl

Um mit Dateien arbeiten zu können, muss zuerst eine Verbindung zwischen VB und der Datei hergestellt werden. Hier muss man die Zugriffsnummer und den Zugriffsmodus angeben.


Open "C:\textfile.txt” For Input As 1
Hier wird die Datei "C:\textfile.txt” für den Modus "Input” mit der Verbindungskennung 1 geöffnet. Diese Kennung ist notwendig, da sonst das Betriebssystem nicht weiß, wo sich die Verbindung zur Datei im Speicher befindet. Um Daten in eine Datei schreiben zu können, muss "Output" oder "Append" verwendet werden. Mit "Append" werden die Daten angehängt.

Wenn man eine Datei für "Output" öffnen will und diese nicht existiert, kommt kein Laufzeitfehler! Die Datei wird erstellt. Das ist sehr praktisch, kann aber auch zu Problemen führen, wenn man mit den falschen Files arbeitet und es nicht merkt.

Eine Übersicht über die Zugriffsmodi;

Modus Bedeutung
Input Datei wird für Lesezugriffe geöffnet.
Output Datei wird für Schreibzugriffe geöffnet
Append Zu schreibende Daten werden angehängt
Binary Datei wird für Lese- und Schreibzugriffe geöffnet, dazu muss man die Befehle Get und Put verwenden
Random Entspricht Binary, nur dass man die Datensatznummer eingeben muss


Man sollte die Zugriffsnummer nie manuell programmieren! Falls diese Zugriffsnummer schon besetzt ist, wird das Programm abstürzen. Die Funktion "FreeFile" sucht eine freie Verbindungskennung aus und gibt die Kennung wieder frei, wenn die Verbindung nicht mehr verwendet wird.
 

Dim intVerbindungsnummer As Integer

intVerbindungsnummer = FreeFile

Open [Datei] For Input As
intVerbindungsnummer
Dateien werden jeweils mit dem "Close"-Befehl geschlossen.

Einlesen und Abspeichern von Daten

Das Öffnen und Schließen der Datei ist nur ein Formalismus, der aber trotzdem nicht fehlen darf. Interessant wird es erst, wenn Werte eingelesen und abgespeichert werden können.

Die wichtigsten Befehle:

Befehl Beispiel Bedeutung
Print Print #DateiNr,
txtEingabe.Text
Schreibt eine Zeichenfolge in die Datei.
Write Write #DateiNr,
txtEingabe.Text
Wie bei "Print", nur dass einzelne Elemente automatisch mit einem Komma getrennt und in "" gesetzt werden
Input Input #DateiNr, Temp Liest eine Zeichenkette aus einer Datei
Line Input Line Input #DateiNr, Temp Datei wird bis zum Zeilenumbruch gelesen
Input-Funktion txtEingabe.Text = Input(DateiNr,10) Lies eine bestimmte Anzahl Bytes aus einer Datei


Beispiele

Sequentiell abspeichern

Private Sub cmdSpeichern_Click()

    Dim DateiNr As Integer

    DateiNr =
FreeFile

    Open "neu.sav" For Output
As DateiNr

        Print
#DateiNr, txtEingabe.Text

    Close

End Sub

 
Sequentiell einlesen

Hier ist zu beachten, dass man den "Umweg" über eine Variable nehmen muss


Private
Sub cmdLesen_Click()

   
Dim DateiNr As Integer

   
Dim TEMP As String

   
DateiNr = FreeFile

   
Open "neu.sav" For Input As DateiNr

       
Input #DateiNr, TEMP

       
txtEingabe.Text = TEMP

   
Close

End
Sub

 
Portionenweises Einlesen von Text

Oft will man nicht den gesamten Inhalt einer Datei einlesen, sondern nur ein paar Bits. Mit der "Input" Funktion kann man eine bestimmte Anzahl von "Bits" einlesen, mit der "Line Input" Funktion jeweils ganze Zeilen.

Die Input Funktion

Der Input Funktion müssen zwei Werte übergeben werden. Die Zugriffsnummer und die Anzahl der zu lesenden Zeichen. Um die Größe der geöffneten Datei zu erfahren, kann man mit der Funktion "Lof" die Anzahl der Bytes herauslesen.

Eine Übersicht der Funktionen, die mit der Länge von Dateien zu tun haben:

Funktion Beispiel Bedeutung
Lof Lof(DateiNr) Gibt die Grösse der geöffneten Datei zurück
FileLen FileLen(Dateiname) Gibt die Grösse einer beliebigen Datei zurück
Eof Eof(DateiNr) Gibt "True" zurück, wenn der Lesebefehl das Ende der Datei erreicht hat
Loc Loc(DateiNr) Gibt die Position des Dateizeigers an (wo gerade gelesen wird)


Zahlen speichert man grundsätzlich mit dem "Write" Befehl, da dieser zwischen Datentypen unterscheiden kann. Bei Zahlen muss man jedoch den Umweg über eine Zahlenvariable nehmen, da aus einem Textfeld nur ein String kopiert werden kann.

Wenn man eine Datei mit "Print" beschrieben hat, wird nach jedem Element ein Zeilenumbruch gemacht. Um diese Datei Zeile für Zeile auszulesen, nimmt man den "Line Input" Befehl.

Private Sub cmdLesen_Click() 
Dim DateiNr As Integer 
Dim TEMP As String 
DateiNr = FreeFile 
Open "neu.sav" For Input As DateiNr 
Do while Not EOF(DateiNr) 
Line Input #DateiNr, TEMP 
txtEingabe.Text = txtTextfeld.Text & TEMP 
Loop 
Close 
End Sub 
Die Datei wird Zeilenweise eingelesen, solange der Zeiger noch nicht am Ende angekommen ist (while Schleife).

Umgang mit Zahlen

Get und Put

Binäre Dateien liest man mit dem "Get” Befehl aus und beschreibt sie mit dem "Put” Befehl. Zur Erläuterung der Befehle ein Beispiel. Es werden drei Zahlen in eine Datei geschrieben:

Dim DateiNr As Integer 
DateiNr = FreeFile 
Dim Wert1 As Double, Wert2 As Single, Wert3 As Integer 
Wert1 = 187644.937 
Wert2 = 18.9 
Wert3 = 16 
Open "test.txt" For Binary As DateiNr 
Put DateiNr, , Wert1 
Put DateiNr, , Wert2 
Put DateiNr, , Wert3 
Close DateiNr 
Das Programm initialisiert drei Variablen von verschiedenen Zahlendatentypen. Danach wird die Datei wie immer geöffnet. Der "Put" Befehl speichert dann die Werte in die Datei. Am Schluß wird die Datei wie immer geschlossen.
Das Herauslesen mit "Get" funktioniert exakt gleich, nur dass man den Befehl "Get" statt "Put" schreibt.

Umgang mit Dateien

In Visual Basic kann man nicht nur Informationen aus Dateien rausholen oder in Dateien speichern, sondern auch Dateien und Ordner erstellen, löschen und verschieben. Die wichtigsten Befehle im Überblick:

Befehl Bedeutung
MkDir Legt ein neues Verzeichnis an
ChDir Setzt aktuelles Verzeichnis auf ein anderes
Kill Löscht eine geschlossene Datei
FileCopy Kopiert eine Datei
Name Benennt Datei/Ordner um
RmDir Entfernt ein leeres Verzeichnis


Um noch mehr Befehle verwenden zu können, muss man API Funktionen aus SHELL32.DLL benutzen.

Dialogfelder

VB stellt vieles zur Verfügung, darunter sind auch Dialogfelder. Um mit den Dialogfeldern arbeiten zu können, muss man unter "Projekt >> Komponenten" das Steuerelement "Microsoft Windows Common Dialog Control 6.0" miteinbeziehen. Das Steuerelement kann nun an einem beliebigen Ort in dem Formular eingeordnet werden (Präfix: cdl). Die wichtigsten Methoden des Steuerelementes im Überblick:

Dialogfeld Methode (vom cdlDialog Objekt)
Datei öffnen ShowOpen
Datei speichern ShowSave
Farbe ShowColor
Schriftattribute ShowFont
Drucker ShowPrinter


Wenn man das Steuerelement mit der rechten Maustaste anklickt und unter Eigenschaften geht, kann man viele Einstellungen verändern. Das ganze ist natürlich auch während der Laufzeit möglich.

Ein Beispiel für ein Dialogfeld, um Dateien zu öffnen.

Dim strDateiname As String 
cdlDialog.InitDir = "C:\Programme\" 
cdlDialog.Filter = "*.ini|*.INI|" 
cdlDialog.DialogTitle = "Öffnen von .ini Files" 
cdlDialog.ShowOpen 
strDateiname = cdlDialog.FileName 
Erklärungen:

Eine String-Variable für den Dateinamen wird deklariert 
Es wird festgelegt, welchen Ordner eingesehen wird 
Mit der Filter-Eigenschaft wird festgelegt, welche Dateien geöffnet werden können 
Der Titel des Dialogfeldes wird bestimmt 
Das Dialogfeld wird geöffnet 
Die Variable strDateiname bekommt den Wert des ausgewählten Files 
Um die Datei zu öffnen, muss man je nach Datentyp andere Befehle verwenden. Das Dialogfeld sieht in diesem Beispiel so aus:





Grafiken

Allgemeines

VB bietet nur einige wenige Methoden für Grafiken. Es besteht allerdings auch die Möglichkeit, Grafiken mit DirectX oder OpenGL darzustellen. Letzteres zu erlernen lohnt sich nur für Grafikprofis.
Mit den wenigen Steuerelementen kann man auch nur auf dem Formular, dem Bildfeld und auf dem Drucker zeichnen. Wenn man Grafiken auf andere Steuerelemente ausgeben will, muss man API Funktionen aufrufen.

Die Grafikmethoden im Überblick

Methode

Syntax

Erklärung

Circle (x, y), Radius, Farbe, Start, Ende, Aspekt Zeichnet eine Ellipse/einen Kreis. Aspekt steht für den Rundungsfaktor
Line [Step] (x1, y1)-[Step] (x2, y2), Farbe, BF Linie oder Rechteck zeichnen. Argument B macht ein Rechteck daraus, Argument F füllt das Rechteck mit der Farbe aus.
PSet [Step] (x, y), [Farbe] Zeichnet einen einzelnen Punkt
Point (x, y) Ermittelt den RGB Wert eines Punktes


Ausgabe

Die Ausgabe findet entweder auf dem Formular, im Bildfeld oder auf den Drucker statt. Als Koordinaten kann man alles von (0, 0) bis (Breite, Höhe) angeben. Was passiert aber, wenn man das Steuerelement in der Größe verändert? Man muss den Programmcode ändern.
Um das zu vermeiden, sollte man ein eigenes Koordinatensystem für jedes Steuerelement machen. Das kann man ganz einfach mit der Scale Methode machen. Hier die Syntax für die Einteilung eines Bildfeldes in 100x100 Punkte:

picBildfeld.Scale (0, 0) – (100, 100)




ScaleHeight, Gibt den inneren Y Punkt des Bildfelds an 
ScaleWidth, Gibt den inneren X Punkt an 
ScaleLeft, Gibt den X Abstand vom Formularrand an 
ScaleTop, Gibt den Y Abstand vom Formularrand an 
ScaleWidth, Gibt den inneren X Punkt des Formulars an 
ScaleHight, Gibt den inneren Y Punkt des Formulars an 
Height, Gibt den Y Punkt des Gesamten Formulars zurück 
Width, Gibt den X Punkt vom ganzen Formular zurück 
Statt den absoluten Koordinaten kann man auch relative Koordinaten und den relativen Unterschied (Step X, Step Y) statt (X, Y) angeben.

Die aktuelle Position findet man den Eigenschaften "CurrentX" und "CurrentY" heraus.

Ausgaben formatieren

Eigenschaft Bedeutung
DrawMode So wird das Muster der Linie an den Hintergrund angepasst (Werte 1-16)
DrawStyle Die Linie wird durchzogen oder gestrichelt, 7 Modi
DrawWidth Legt die Breite einer Linie von 1 bis 32767 Pixel fest
FillColor Die Füllfarbe von Kreisen bzw. Rechtecken wird festgelegt
FillStyle Legt den Stil fest mit dem das Objekt ausgefüllt wird, 8 Modi


Farben

In Windows, somit auch in VB, werden Farben mit dem RGB (Red, Green, Blue) Wert dargestellt. Jede Grundfarbe kann hier einen Wert zwischen 0 und 255 annehmen, d.h. es gibt dreimal 255 Möglichkeiten >> man kann 255^2 Farben darstellen. Farben werden in VB als long gespeichert.

Um mit Hex Farbwerten arbeiten zu können, muss man vor die Hex-Zahl &H voranstellen, damit sie als Hex Wert erkannt wird.

Um eine Farbe direkt an ein Steuerelement zuzuweisen, kann man die RGB Funktion benutzen.

frmHauptformular.BackColor = RGB(255,0,155) 
Wenn einem 16 Farben genügen, kann man den QBColor-Befehl nutzen.

frmHauptformular.BackColor = QBColor([0-16]) 
Für diese 16 Farben gibt es auch Konstanten, z.B. vbRed für Rot, vbBlack für schwarz usw.

Bilder anzeigen

Fast jedes Steuerelement hat eine "Picture" Eigenschaft. Ein Bild kann man also auf den meisten Steuerelementen so anzeigen lassen:

Steuerelement.Picture = "C:\Bilder\Bild.bmp" 
picBildfeld.Picture = LoadPicture("C:\Bilder\Bild.bmp") 
Um Bilder abspeichern zu können, kann man den "SavePicture” Befehl benutzen. Nun ist es bereits möglich, ein einfaches Zeichenprogramm zu programmieren. Man muss nur die PSet Methode mit dem MouseMove Ereignis verknüpfen.

Das Abspeichern von Bildern (bzw. Bildfeldern) ist auch nicht besonders schwer.

SavePicture picZeichenfläche.Image, "Bild.bmp" 
Allerding funktioniert der obere Befehl nich mehr, wenn man ein Bild an einer bestimmten Position anzeigen lassen will, da er die Bilder links oben platziert. Dazu stellt VB die PaintPicture Methode zur Verfügung. Das komische an dieser Methode ist, dass sie keine Bilder laden kann, sondern, dass man die Picture Eigenschaft von anderen Objekten übernehmen muss. Die Argumente in den Eckklammern sind optional.

Objekt.PaintPicture Picture, X1, Y1, [Breite1], [Höhe1], [X2], [Y2],
[Breite2], [Höhe2], [Ropcode]
Argumente im Überblick

Argument

Bedeutung

Picture Legt über die Picture Eigenschaft eines anderen Objekts das anzuzeigende Bild fest.
X1, Y1 Die Koordinaten, wo die linke obere Ecke auf dem Bildfeld angezeigt werden soll.
Breite1, Höhe1 Die Höhe und Breite des Bildes. Das Bild wird ggf. gestreckt.
X2, Y2 Die Koordinaten, wo die rechte untere Ecke auf dem Bildfeld angezeigt werden soll.
Breite2, Höhe2 Legt die Breite und Höhe des Objektes fest, in welchem es angezeigt werden soll.
Ropcode Legt fest, wie die Quelle mit dem Bildfeld kombiniert wird.


Ausgabe auf dem Drucker

Das Drucken in VB wird über das Printer Objekt gesteuert. Mit dem Printer Objekt kann man nicht nur ausdrucken, sondern auch erfahren wie viele und welche Drucker installiert sind. Wichtig: Alles was mit Druckern zu tun hat, wird über die Printers Klasse angesprochen, Ausdrucke erfolgen durch das Printer Objekt der Klasse Printers. Dazu ein Beispiel:

Dim n As Integer 
For n = 0 To Printers.Count - 1 
lstDrucker.AddItem (Printers(n).DeviceName) 
Next 
Hier wird eine Liste mit allen verfügbaren und installierten Druckernamen gefüllt.

Die Ausgabe von Text auf den Drucker ist nicht sehr sensationell, dafür einfach. Folgende Anweisung gibt einen String auf den Drucker aus. Mit der darauf folgenden Anweisung wird dem Drucker mitgeteilt, dass der Drucker hier nun aufhören soll.

Printer.Print "Dieser Text wird auf den Drucker ausgegeben." 
Printer.Enddoc 
Die Z-Achse

Die Z-Achse dient (leider) nicht dazu, 3 dimensionale Grafiken auszugeben, sie gibt nur an, ob sich ein Objekt im Vordergrund oder im Hintergrund befindet. Hier gibt es nur zwei Zustände: 1 und 0.

Objekt.ZOrder [1/0] 
Beim Wert 1 wird das Objekt im Vordergrund bzw. Wert 0 im Hintergrund untergebracht.

Bildschirmauflösung feststellen

Die Bildschirmauflösung bekommt man in VB, wenn man die Widht Eigenschaft des Screen Objektes durch die TwipsPerPixelX Eigenschafts des gleichen Objektes dividiert. Das kann z.B. so aussehen:

Private Sub Form_Load() 
txtWidth.Text = Screen.Width 
txtHeight.Text = Screen.Height 
txtTwipsPerPixelX = Screen.TwipsPerPixelX 
txtTwipsPerPixelY = Screen.TwipsPerPixelY 
txtPixelX.Text = Screen.Width / Screen.TwipsPerPixelX 
txtPixelY.Text = Screen.Height / Screen.TwipsPerPixelY 
End Sub
Zur Verdeutlichung das Ergebnis bei einer 1024x768 Auflösung.





Auto Redraw?

Die Auto Redraw Eigenschaft einer Ausgabefläche gibt an, ob der Inhalt in den Arbeitsspeicher geladen werden soll (true) oder nicht (false). Bei false wird das Bildfeld geleert, wenn man es mit einem anderen Objekt überdeckt.

API-Funktionen

Allgemeines

In Visual Basic hat man recht viele Funktionen zur Verfügung. Was macht man aber, wenn man z.B. erfahren möchte, wie viel Arbeitsspeicher ein PC hat? Dazu gibt es keine VB Funktionen. Um solche Informationen herauslesen zu können, muss man fest eingebaute Windows Funktionen (sog. API Funktionen) aufrufen. Ein Vorteil von VB gegenüber C/C++ ist, dass man relativ wenige API Funktionen benötigt, da man viele Module einfach verwenden kann (z.B. Standarddialogfelder, welche man in C/C++ durch API Befehle aufrufen muss).
API Funktionen werden jeweils in .dll Dateien gespeichert.

Es gibt auch "gefährliche" API Funktionen, mit denen man z.B. Laufwerke formatieren, die Registry verwenden oder andere systemnahe Dinge verändern kann >> man sollte nur die Funktionen aufrufen, die man kennt. Um zu erfahren, was die einzelnen API Funktionen tun, muss man sich spezielle Bücher besorgen oder in einem API-Viewer nachschauen.

Der Aufruf von API Funktionen

Um API Funktionen verwenden zu können, muss man dies dem Compiler mit einem "Declare" Befehl angeben. Dieser Declare Befehl teilt VB vier wichtige Dinge mit:
  • Name der Funktion/Prozedur
  • Name der DLL
  • Anzahl der Argumente
  • Datentyp des Rückgabewerts
Eine Deklaration einer Prozedur sieht syntaktisch so aus:

[Public|Private] Declare Sub Name Lib "Libname"
[Alias "Aliasname"] _ [Argumente] 
Die Syntax für eine Funktion erfordert zusätzlich den Datentyp des Rückgabewertes:

[Public|Private] Declare Sub Name Lib "Libname" [Alias "Aliasname"] _ [Argumente] [As Datentyp] 
Der Aliasname ist nichts weiteres als der wahre Name einer Funktion. Man weisst einen Aliasnamen zu, wenn der Originalname zu lang und schlecht merkbar ist oder wenn man einen Namenskonflikt vermeiden möchte.

Der API Viewer

Damit man sich die Informationen für API Deklarationen nicht zusammensuchen muss, sollte man einen sog. API Viewer benutzen. So ein Programm stellt alle nötigen Informationen zur Verfügung. Zu empfehlen ist ganz besonders der "API-Guide" von http://www.allapi.net.

Auf die Registry zugreifen

Bevor man mit Programmen auf die Registry zugreift, sollte man unbedingt ein Registry Backup machen! Die Registry dient nicht dazu, große Datenmengen aufzunehmen. Mithilfe dieser Datenbank kann man Einstellungen und Konfigurationen abspeichern, welche wenig Platz benötigen.

Visual Basic hat bereits zwei Registry Befehle, diese speichern die Schlüssel jeweils immer in dem gleichen Unterordner. Um weitergehende Einstellungen an Windows oder an Programmen vorzunehmen, muss man auf die entsprechende .dll zugreifen.

Eine Übersicht über die wichtigsten Registry Funktionen:

Syntax

Die Syntax in Visual Basic sieht etwas weniger kompliziert und verschachtelt aus, als bei von C abgeleiteten Sprachen. Klammern werden in VB nur sehr selten verwendet, z.B. um Bedingungen zu verschachteln. Visual Basic korrigiert den Ausdruck sofort nach anwählen einer anderen Programmzeile wie z.B in: z = x + y. Syntaxfehler können in Visual Basic also so gut wie unmöglich auftauchen, da sie automatisch korrigiert werden.

Ereignisse

Sehr wichtig ist es zu wissen, dass Visual Basic Ereignisorientiert ist. D.h. alle Befehle, die ein Programm ausführt sind durch ein Ereignis verursacht. Jedes Steuerelement hat seine eigenen Ereignisse. Hier ein paar grundlegende Ereignisse im Überblick

Funktion Bedeutung
RegCloseKey Schließt Zugriff auf einen Schlüssel
RegCreateKeyEx Öffnet (oder erstellt, falls nicht vorhanden) einen Schlüssel
Ereignis Tritt auf, wenn Steuerelemente
Click das Steuerelement angeklickt wird. Alle sichtbaren Steuerelemente
Got/Lost-Focus das Steuerelement den Fokus erhält, bzw. verliert. Alle sichtbaren Steuerelemente
Mouse/Key-Down eine Taste runtergedrückt wird Alle sichtbaren Steuerelemente
Mouse/Key-Press eine Taste gedrückt und wieder losgelassen wird. Alle sichtbaren Steuerelemente
Mouse/Key-Up die Taste wieder losgelassen wird Alle sichtbaren Steuerelemente
Load Das Formular geladen wird Formular


Nachdem ein Formular geladen wurde, passiert zuerst mal nichts. Visual Basic geht in die Warteschleife über. Nun muss eine Prozedur aufgerufen werden. Dies passiert in einem VB meistens, wenn eine Schaltfläche angeklickt wurde. Das kann aber auch ein LostFocus Ereignis sein...

Kein Formular – kein Programm?

Visual Basic Programme müssen nicht zwingend ein Formular besitzen. Man kann auch einfach eine Prozedur namens Main programmieren, welche beim Programmstart ausgeführt wird.

Kommentare

Kommentare können dazu benutzt werden, den Programmcode auszukommentieren, d.h. näher zu beschreiben. Man kann Kommentare jedoch auch dazu einsetzten, einen bestimmten Teil eines Programms nicht zu kompilieren. Der Programmcode bleibt dabei in der Quellcodedatei erhalten. Kommentare werden in VB mit dem unscheinbaren Zeichen ’ gemacht. Mit // oder /* */ kann man in VB keine Kommentare machen.

Objekte

Ein Objekt ist in den meisten Fällen ein Steuerelement. Dazu kommt noch das Objekt „Me“, was soviel bedeutet wie: „Dieses Formular“.

Methoden

Eine Methode ist ein Befehl, der sich auf das aufgeführte Objekt bezieht. Eine Methode wird folgender maßen aufgeführt: Me.Cls Diese Methode leert die Innenfläche des Formulars. Methoden werden durch einen „.“ Getrennt vom Objekt aufgeführt Visual Basic an sich kennt keine Befehle, korrekt sind diese nur Methoden vom Objekt VBA. Falls man eine Funktion z.B. gleich wie einen VB-Befehl benannt hat, kann man den VB-Befehl folgender maßen aufrufen:

VBA.Befehl 
Eigenschaften

Eine Eigenschaft ist wie der Name schon sagt, eine Eigenschaft eines Objekts. Die Syntax entspricht der Syntax einer Methode, mit dem Unterschied, dass jeder Eigenschaft ein Wert zugewiesen wird. lblLabel1.caption = „Das ist ein Bezeichnungsfeld“. Die Caption Eigenschaft eines Labels erhält den Wert „Das ist ein Bezeichnungsfeld“.

Variabeln

Deklaration von Variabeln:

Bei jedem Programm sollte man „Option Explicit“ in die erste Zeile schreiben. Durch diesen Befehl müssen alle Variabeln in einem Programm deklariert werden.

Es gibt drei Möglichkeiten um eine Variable zu deklarieren: Dim [Variabelnname] Als [Datentyp]
  • Normale Deklaration in einer Subroutine Private [Variabelnname] As [Datentyp]
  • Deklaration einer Variable, die nur in der lokalen Funktion gültig ist Public [Variabelnname] As [Datentyp]
  • Deklaration einer „globalen“ Variable, d.h. dass sie von allen Prozeduren und Funktionen angesprochen werden kann,
Datentypen

Datentyp Wertebereich
Boolean 0 (false) oder 1 (true)
Byte Ganze Zahlen von 0 bis 255
Integer Ganze Zahlen von –32'768 bis 32’767
Long Ganze Zahlen von -2'147'483'648 bis 2'147'483’647
Single Von –3.402823E38 bis –1.401298E-45 und von 1.401298E-45 bis 3.402823E38
Double Single mit etwa 300 Nachkommastellen
Decimal Ganze Zahlen mit 28 Nachkommastellen bis etwa 500'000
Currency Ganze Zahlen mit 4 Nachkommastellen. Von –922'337'203'685'477.5808 bis 922'337'203'685'477.5807
Date Datum von 01.01.100 bis 31.12.9999
String Bis 65500 Zeichen
Variant Bis 2'000'000'000 Zeichen
Object Referenz zu einem Objekt


Arrays

Eine herkömmliche Variable kann nur einen Wert speichern. Um mehrere Werte zu speichern müsste man also mehrere Variabeln deklarieren. Was tut man aber, wenn man nicht weiss, wie viele Werte der Benutzer eingibt (z.B. in einem Taschenrechner)?. Dafür gibt es sogenannte Arrays oder zu deutsch, Feldvariabeln.

Deklaration

Ein Array wird mit den selben Befehlen deklariert, wie eine „normale“ Variable. Es ist jedoch wichtig, einen Wertbereich anzugeben. Dieser Wert wird in Klammern nach dem Variabelnamen aufgeführt.

Dim meinArray(0 to 199)
Obiges Beispiel deklariert eine Variable namens meinArray das 200 Werte entgegen nehmen kann. Das Schlüsselwort to kann man sich auch sparen. Folgende Deklaration hat die selbe Funktion:

Dim meinArray(199)
Wenn nur die Grösse angegeben wurde, geht VB davon aus, dass man die Felder 0 bis 199 deklarieren will. Es gilt jedoch als „sauberer Programmierstil“, wenn man die Null auch angibt.

Werte zuweisen

Beim Zuweisen eines Wertes ist es wichtig, dass man den Index angibt. Ansonsten hat dies eine Fehlermeldung zur Folge.

MeinArray(0) = „Behälter 0“

MeinArray(1) = „Behälter 1“
Für den Index können natürlich auch Variabeln verwendet werden. Bei diesem Beispiel wird das Array mithilfe einer Schleife mit Werten abgefüllt.

Dim meinArray(1 To 1000)

Dim n as Integer

n=1

Do while n<=1000

      meinArray(n) = n

      n = n + 1

Loop
Mehrdimensionale Arrays

Arrays können auch mehrere Dimensionen haben. Das sollte man sich am besten wie ein Schachbrett vorstellen, wobei jedes Häuschen ein Behälter ist und das ganze Schachbrett für das Array steht. Mehrdimensionale Arrays werden so deklariert:

Dim meinArray(1 to 8, 1 to 8)
Das Array hat nun 64 Felder. Die Wertzuweisung erfolgt nun, indem man die „Koordinaten“ angibt.

meinArray(5,3) = „Das Feld 5-3“
Die Array-Funktion

Wenn man ein Array von Hand abfüllen will, muss jedes Feld mit einem Wert aufgeführt werden. Um Tipparbeit zu sparen, kann man sich der Array-Funktion bedienen.

Dim Mannschaften(0 to 32)

Mannschaften = Array(„FC-Luzern“,
„FC-Basel“, „GC“)
Der Index wird hier automatisch vergeben.

Dynamische Feldvariabeln

Eine dynamische Feldvariable kann ihre Größe während der Laufzeit ändern. Angenommen, man deklariert ein Array mit 200 Behältern, so verschwendet man Platz, wenn man nicht alle Behälter ausnützt. Wenn man aber mehr als 200 Werte zuweisen will, wird es einen Laufzeitfehler geben. Eine dynamische Feldvariabel wird so deklariert:

Dim meinArray()
In der Prozedur muss man dem Array jedoch die Anzahl der Behälter angeben. Das tut man mit dem ReDim Befehl.

ReDim meinArray(0 to 136)
In der Praxis verwendet man jedoch keine konkreten Werte, sondern weißt die Anzahl Behälter mit Variabeln zu, die durch verschiedene Bedingungen ihren Wert erhalten.

Grenzen eines Arrays

Die Unter- und Obergrenze eines Arrays stellt man mit folgenden Befehlen fest:

Lbound(Arrayname)

Ubound(Arrayname)
Statische Variabeln

Wichtig ist es, zu wissen, dass eine Variable in der Laufzeit ihren Wert verlieren kann. Das ist genau dann, wenn du Prozedur verlassen wird. Die Variable verliert ihren Weg. Wird die Prozedur wieder aufgerufen, bekommt die Variable wieder den Wert 0. Um das zu verhindern, muss man den „Static“ Befehl zur Variabelndeklaration verwenden.

Static intZahl As Integer
Berechnungen

Allgemeines

So kann eine Berechnung in VB aussehen:

z = x + y
Das Resultat einer Berechnung wird immer links geschrieben! Dem Ausdruck links vom Gleichheitszeichen wird der Wert des Ausdrucks rechts vom Gleichheitszeichen zugewiesen. In der Mathematik ist folgende Operation unmöglich:

Z = Z + 1
In Visual Basic ist sie jedoch erlaubt, da = der Zuweisungsoperator ist (jedoch auch der Vergleichsoperator, kein == wie in C, C++ oder PHP).

Rechenoperationen

Zeichen Erklärung
+ - * / Grundoperationen
- Vorzeichen „Minus“
\ Integerdivision
Mod Division mit Rest
=, <>, <, >, <=, >= Vergleichsoperatoren
NOT à logische Verknüpfungen
AND
OR
XOR
EQV
IMP


Zeichenketten

Allgemeines

Eine Zuweisung einer Zeichenkette muss immer mit Anführungszeichen erfolgen!

Textvariable = „Das ist ein Text“
Verschiedene Textteile könne mit & verkettet werden:

Textvariable = „Das“ & „Ist“ &
„ein“ & „Text: “ & vbCrLf _

& strText & „ Ende des Textes“
In Zeichenketten können natürlich auch Variabeln vorkommen, in diesem Falle die Variable strText. Text muss immer mit „“ abgegrenzt werden. VbCrLf ist eine VB-Konstante, die für einen Zeilenumbruch steht. Das _ am Ende einer Zeile bedeutet, dass der Befehl auf der nächsten Zeile fortgesetzt wird, da man in VB kein ; an das Ende jedes Befehls stellt, wie bei C, C++ oder PHP.

Msg- und InputBoxes

Allgemeines

Syntax zum aufrufen einer MsgBox:


MsgBox(Prompt[, Schaltflächen][,
Titel][, Hilfedatei, Kontext])
Die MsgBox (MessageBox – Mitteilungsbox) dient nur zur Ausgabe einer (Fehler-)Meldung. Man kann jedoch mehrere Schaltflächen verwenden und abfragen, welche Schaltfläche gerade gedrückt worden ist. Hier ein Beispiel dazu:


Antwort = MsgBox(Prompt:=“Möchten sie
abbrechen?“, _ Buttons:=vbIconExclemation & _ VbIconYesNo,
Title:=“Frage...“)

 
Die Variable „Antwort“ bekommt in diesem Fall von Windows Rückmeldung, welche der beiden Tasten gedrückt wurde. So lassen sich Abfragen generieren, wie z.B. in den Office Programmen; „Sind sie sicher, dass sie das Programm beenden wollen?

Syntax zum aufrufen einer InputBox:

InputBox(Prompt[, Titel][, Default][,
xpos][, ypos][. helpfile, context])

 
Mit der InputBox kann man den Benutzer zu einer Eingabe auffordern. Die InputBox hat neben den Buttons auch ein Textfeld, wo der Benutzer Werte eingeben kann. Hier ein kleines Beispiel, um einer Textvariabeln einen Wert zuzuweisen:

Dim text As String

text = InputBox(Prompt:="Bitte
geben Sie einen Text ein", _ Title:="InputBox")
 
Die Variable text wird deklariert. Mit dem 2. Befehl wird ihr der Wert der Input-Box zugewiesen.

Entscheidungen

Allgemeines

Der Computer kann keine eigenen Entscheidungen treffen, er kann nur Auswerten ob eine Bedingung zutrifft oder nicht! (Ja/Nein)

Die IF Schleife

Die Syntax für eine IF Schleife sieht folgender maßen aus:

If [Ausdruck] Then [Befehl]
 
So sähe ein pratkisches Beispiel aus:

If Vermögen = 0 Then KreditAufnehmen
 
Falls das Vermögen null ist, wird ein Kredit aufgenommen. Der Ausdruck kann mit folgenden Vergleichsoperatoren mit einem Wert verglichen werden:

=, <>, <, >, <=, >=
 
Ein Vergleich „Ist Gleich“ kann bei Visual Basic mit dem Gleichheitszeichen (=) durchgeführt werden, man braucht nicht ==zu schreiben, wie in C, C++ oder PHP.

Man kann verschiedene Ausdrücke mit den logischen Operatoren „OR“ oder „AND“ verknüpfen.

If Vermögen = 0 AND Bargeld = 0 Then
KreditAufnehmen
 
In diesem Beispiel wird nur ein Kredit aufgenommen, wenn man kein Vermögen mehr hat und das Portemonnaie leer ist!

If Vermögen = 0 OR Bargeld = 0 Then
KreditAufnehmen
 
Bei obigem Beispiel wird ein Kredit aufgenommen, wenn man kein Vermögen mehr hat, oder wenn das Portemonnaie leer ist!

Punkt vor Strich!

Was in der Mathematik eine Punktoperation ist, ist in Visual Basic der AND Operator! Dieser wird zuerst ausgewertet!

Mathematik:

         A * B + C * D
 
Visual Basic:

         A AND B OR C AND D
 
Man könnte das auch mit Klammern verdeutlichen:

(A AND B) OR (C AND D)
 
So wird der Ausdruck ausgewertet.

Wenn man Strings miteinander Vergleichen will, muss man den Vergleichswert in „“ setzen, falls es sich nicht um eine Variable handelt.

Falls man nur ein Teil des Strings vergleichen will, so hat VB die Instr-Funktion bereit. Syntax:

 

If Instr([Variable], „[Vergleiswert]“)
> 0 then [Anweisung]
 
Falls die Variable einen Teil des Vergleichswerts enthält, so wird die Anweisung durchgeführt. Mit dem > 0 Vergleich wird ermittelt, an welcher Stelle der Variable der Vergleichswert beginnt. Falls der Wert 0 ist, beginnt der Vergleichswert gar nie – der Vergleichswert ist nicht in der Variable enthalten. In diesem Fall könnte man den Vergleich > 0 aber auch weglassen, was man bei anderen Entscheidungen auch machen könnte, so wäre es aber etwas unüberischtlich und hätte nur bei diesem Beispiel einen Vorteil.

Mehrere Befehle ausführen

Wenn mehrere Befehle ausgeführt werden sollen, so muss man mitteilen, wann der Befehlsclock fertig sein soll. Dies tut man mit dem End If Befehl. die Syntax:


If [Bedingung] = [Wert] Then

Befehl 1

Befehl 2

Befehl 3

End if

  
Es werden nun alle Befehle zwischen Then und End If durchlaufen.

Der Else Befehl

Bisher wurden nur Aktionen ausgeführt, falls eine Bedingung zutrifft. Was passiert aber, wenn die Bedingung nicht zutrifft? – Mit dem Else Befehl kann der Sonst-Fall angegeben werden! Hier die Syntax:


If [Bedingung] = [Wert] Then

Befehl 1

Befehl 2

Befehl 3

Else

Befehl 4

Befehl 5

Befehl 6

End if
  
Die Befehle zwischen Else und End if werden nur dann durchgeführt, wenn die Bedingung nicht zutrifft!

Entscheidungen könne beliebig verschachtelt werden. Dies kann z.B. so aussehen:


If [Bedingung1] = [Wert] Then

If [Bedingung2] = [Wert] Then

Befehl 1

Else

      Befehl 2

Else

If [Bedingung3] = [Wert] Then

            Befehl 3

      Else

            Befehl 4

End if
  
Wenn die Bedingung 1 zutrifft, so wird Bedingung 2 geprüft. Wenn Bedingung 2 zutrifft, wird Befehl 1 ausgeführt, ansonsten Befehl 2. Das ganze analog, wenn die Bedingung 1 nicht zutrifft (beim Else-Fall).

Das Verschachteln von Bedingungen ist schneller ausgeführt als das Verknüpfen von Bedingungen mit OR oder AND Operatoren! Zudem ist es auch übersichtlicher.

Der ElseIf Befehl

Wenn man eine verschachtelte Bedingung hat, aber keine Befehle für den Else Fall vorgesehen hat, ist die ElseIf Schleife angebracht. Mit der ElseIf Schleife kann eine zweite Bedingung geprüft werden:


If [Bedingung] = [Wert] Then

Befehl 1

Befehl 2

Befehl 3

ElseIf [Bedingung] = [Wert] Then

Befehl 4

Befehl 5

Befehl 6

Else:

Befehl 7

Befehl 8

Befehl 9

End if

   
Für den ElseIf Fall muss natürlich auch eine Bedingung angegeben werden! Man kann auch mehrere ElseIf Abfragen auf gleicher Ebene hintereinander ausführen, dafür ist der „Select Case“ Befehl aber sauberer (siehe weiter unten).

Der GoTo Befehl

Mit dem GoTo Befehl kann man jederzeit an eine beliebige Stelle einer Prozedur hüpfen. Das ganze sieht dann etwa so aus:


Anfang:

Befehl 1

Befehl 2

Befehl 3

GoTo Anfang
   
Die Befehle 1-3 werden ausgeführt. Der GoTo Befehl teilt dem Programm mit, dass es nach oben hüpfen soll. Diese Schleife wird unendlich mal durchlaufen.

Der GoTo Befehl gilt als „unsauberer“ Programmierstil! Heutzutage verwendet man statt dem GoTo Befehl Funkionen und Subroutinen, die jederzeit aufgerufen werden können.

Der Select Case Befehl

Mit dem „Select Case“ Befehl kann eine Reihe von Fällen geprüft und die jeweiligen Befehle ausgeführt werden. Hier die Syntax:


Select Case [Ausdruck]

      Case Fall1

            Befehle

      Case Fall2

            Befehle

      Case Else

            Befehle

End Select

    
Hier ein praktisches Beispiel dazu:

Select Case Zahlen

Case  Is < 0

            MsgBox Prompt:=“Eine Zahl,
die kleiner ist als 0“

Case  Is = 0

            MsgBox
Prompt:=“Die 0“

      Case 1 To 9

            MsgBox Prompt:=“Eine Zahl
von 1 bis 9“

      Case 10 To 19

            MsgBox Prompt:=“Eine Zahl
von 10 bis 19“

      Case Else

            MsgBox Prompt:=“Irgendeine
andere Zahl!“

End Select
    
Zum Vergleich ist stets ein Is vor den Vergleichsoperator und den Vergleichswert zu setzen. Bei Wertereichen ist das nicht notwerndig.

Optionsfelder und Kontrollkästchen

Entscheidungen lassen sich besonders gut mit zwei Steuerelementen verbinden - mit dem Kontrollkästchen und dem Optionsfeld. Der Unterschied zwischen diesen beiden Steuerelementen ist folgender:

In einem Formular/Rahmen kann immer nur eines von mehreren Optionsfeldern aktiv sein, jedoch können mehrere oder kein Kontrollkästchen aktiviert sein.

Die wichtigste Eigenschaft dieser Steuerelemente ist „value“. Wenn ein Optionsfeld aktiviert ist hat es den Wert „true“, ein aktiviertes Kontrollkästchen hat jedoch den Wert „1“. Es ist jeweils die exakte binäre Logik, der Programmierer muss diesen Unterschied jedoch kennen!

Programmierschleifen

Allgemeines

Eine Schleife ist eine Zusammenfassung von Befehlen, die eine bestimmet Anzahl nacheinander ausgeführt werden. Visual Basic kennt folgende Schleifen:
  • Die „For-Next“ Schleife
  • Die „Do-Loop“ Schleife
  • Die „For-Each“ Schleife
Hierbei untescheidet man von „kopf- und fussgesteuerten“ Schleifen.

Eine kopfgesteuerte Schleife wird nicht durchlaufen, wenn die Bedingung nicht zutrifft – sie enhält die Durchlaufbedingung am Anfang!

Die „For-Next“ Schleife ist kopfgesteuert! Unlogischerweise wird folgende Schleife einmal durchlaufen:


For n = 0 to 0

      Befehle

Next
Eine fussgesteuerte Schleife wird mindestens einmal durchlaufen. Wenn am Ende die Abbruchbedingung zutrifft, so wird sie nicht mehr durchlaufen, ansonsten wird sie wieder durchlaufen.

Die „For-Next“ Schleife

Hier muss ein Startwert, ein Endwert und manchmal auch ein Schrittwert eingegeben werden. Syntax:


For [Zählervariable] = StartWert To
EndWert Step [Schrittwert]

      [Befehle]

Next

 
Hier ein praktisches Beispiel:


For n = 1 to 10

      X = X + 1

Next
 
Die Schleife wird für Werte von n = 1 bis 10 durchgeführt. Da keine Schrittgrösse angegeben wurde, ist diese 1. Falls X den Startwert 0 hat, so ist der Endwert 10 – Die Variable wird 10 mal durchlaufen. Falls man den Schrittwert „Step 0.5“ angeben würde, hätte X einen Endwert von 20!

Achtung: Das Zählen in 0.1 Schritten ist sehr gefährlich, da der VB-Compiler bei float Zahlen eine gewisse Ungenauigkeit hat! Diese stört zwar nicht gross bei Berechnungen, für Schleifen sollte man aber immer Ganzzahlen oder den Currency-Datentyp verwenden!

Die „Do-Loop“ Schleife

Bei der Do-Loop Schleife gibt es keinen Schleifenzähler. Die Anzahl der Durchläufe werden in der Abbruchbedingung angegeben. Syntax:


Do while|until [Abbruchbedingung]

      [Befehle]

Loop
Die Do-Loop Schleife wird solange durchlaufen, bis die Abbruchbedingung eintrifft. Bei while wird die Schleife solange durchlaufen, wie die Bedingung wahr ist. Bei until wird die Schleife solange durchlaufen, wie die Bedingung falsch ist.


Do while n < 10

      N = n + 1

      Befehl 1

Loop
Befehl 1 wird solange durchgeführt, bis n nicht mehr < 10 ist. Falls keine Abbruchbedingung steht, wird die Schleife unendlich oft durchlaufen. Man kann die Schleife jedoch auch in der Mitte verlassen.

 

Do while

      n = n + 1

      If n > 10 then Exit Do

      Befehl 1

Loop

Die Do Loop Schleife kann auch mit einer “Until-Bedingung” gesteuert werden!


Do until n > 10

      n = n + 1

      Befehl1

Loop
„While“ und „until“ könne auch nach dem „loop“ Befehl aufgeführt werden – so macht man aus einer kopfgesteuerten- eine fussgesteuerte Schleife!
Der Unterschied zwischen while und until ist folgender: Die while-Schleife wird solange durchlaufen, wie die Bedingung wahr ist. Die until-Schleife wird solange durchlaufen, wie die Bedingung falsch ist!


Do

      Befehle

Loop [while|until Abbruchbedingung]
Schleifen verlassen

Falls keine Abbruchbedingung angegeben wurde, läuft die Schleife unendlich durch. Man kann aber eine Schleife auch im inner mit einer Abbruchbedingung versehen. Dazu stehen folgende Befehle zur Verfügung:

 

Exit Do

Exit For

Exit Function

Exit Property

Exit Sub
Diese Befehle warden häufig mit einer “If-Abfrage” im innern einer Schleife aufgeführt:

 

Do

      n = n + 1

      If n > 10 Then Exit Do

Loop

 
Die Schleife wird verlassen, wenn n grösser als 10 ist.

Listen- und Kombinationsfelder

Allgemeines:

Beide Steuerelemente haben die Eigenschaft, dass sie mehrere Texteinträge zur Verfügung stellen. Die Hauptunterschiede zwischen diesen beiden Steuerelementen sind folgende:
  • Ein Listenfeld hat eine feste Anzahl von Einträgen – mit dem Kombinationsfeld kann man alternatie Einträge mit dem integrierten Textfeld machen.
  • Bei einem Listenfeld können auch mehrere Einträge ausgewählt werden, falls die Eigenschaft „MultiSelect“ auf „True“ ist. Das Kombinationsfeld lässt nur einen selektierten Eintrag zu. Mehrspaltige Darstellung wird nur bei Listenfeldern unterstützt.
  • Das Listenfeld eignet sich gut für Sortierroutinen, das es die entsprechende Eigenschaft bereits besitzt. Dafür sparen Kombinationslisten Platz und sehen auch etwas schöner aus.
Beide Steuerelemente sind wie „Array’s“ zu behandeln. Das heisst, dass jeder Texteintrag einen Index besitzt.

lstListe.List([0 – 32’767]) = „Text“
 
Einträge hinzufügen

Der Index wird in Klammern nach der Eigenschaft aufgeführt. Neue Einträge bring man mit der „AddItem“ Methode in die Liste:


lstListe.AddItem = „neuer Eintrag“
 
Das Abfüllen kann auch mit einer Schleife vereinfacht werden. In diesem Beispiel werden Werte von 1 bis 100 in die Liste eingefügt. Neue Einträge werden jeweils an das Ende der Liste gesetzt. Texteinträge kann man auch mit der „Sorted“ Eigenschaft der Liste sortieren lassen.


For n = 1 to 100

      LstListe.AddItem  n

Next
 
Man kann aber auch die Position in der Liste selber wählen:

 

lstListe.AddItem „Text“, 99
 
Der Wert “Text” wird an Stelle 100 der Liste gespeichert.

Einträge entfernen

Einträge können mit der „RemoveItem“ Methode entfernt werden:


lstListe.RemoveItem (23)

  
Hier wird der Eintrag an Stelle 24 der Liste entfernt. Man kann auch sämtliche Einträge auf einmal löschen, dazu gibt es die „Clear“ Methode.


lstListe.Clear

   
Auswahl von Einträgen

Die Zuweisung des selektierten Listeneintrages wird folgendermassen an eine Variable weitergegeben:

 

Variable = lstListe.List([lstListe.Index])

    
Das Aufführen der Liste vor dem Index ist hier nicht zu vergessen!

Um zu erfahren, welche Einträge bei einer Mehrfachauswahl ausgewählt wurden, steht die „Selected“ Eigenschaft zur Verfügung. Mit folgender Schleife wird im Debugfenster angezeigt, welche Einträge ausgewählt sind:


For n = 0 to lstListe.ListCount – 1

      If lstListe.Selected(n) = true then

            Debug.Print
lstListe.List(n)

      End If

Next

 
    
Mehrfachauswahl von Listen

Damit man mehrere Einträge aus einer Liste auswählen kann, muss die Eigenschaft „MultiSelect“ den Wert 1 haben. Wenn diese Eigenschaft den Wert 2 hat, so kann man mehrere Einträge mit gedrückter Mausttaste anwählen.

Um zu erfahren, welche Einträge ausgewählt sind, genügt die „Selected“ Eigenschaft nicht mehr, da sie nur den Wert des zuletzt ausgewählten Eintrages zurückgibt. Hierzu muss man eine kleine Schleife programmieren. Die selektierten Einträge werden hier ins Debug-Fenster geschrieben.

For n = 0 to lstListe.ListCount – 1

      If lstListe.Selected(n) = true
Then

            Debug.Print
lstListe.List(n)

      End if

Next

     
Werte mit Steuerelementen eingeben

Allgemeines

Das Einstellen von Werten mit Steuerelementen hat einige Vorteile. So kann man bei einen Schiebebalken nur eine bestimmte Anzahl von Werten bestimmen. Eine Eingabeprüfung erübrigt sich also. Oft ist es auch benutzerfreundlicher, als wenn der Benutzer in ein Textfeld eintragen muss. Der Benutzer weiß zudem, was Maximal- und Minimalwert sind. VB hat 3 gute Steuerelemente auf Lager:
  • Die horizontale/vertikale Bildlaufleiste
  • Das AufAb Steuerelement
  • Den Schieberegler (Zusatzsteuerelement, Windows Common Controls 6.0)
Die horizontale/vertikale Bildlaufleiste

Mit einer Bildlaufleiste kann man einen Wert in einem bestimmten Bereich einstellen. Den aktuellen Wert kann man mit der „Value“ Eigenschaft abfragen.

Eigenschaft Bedeutung
LargeChange Legt fest, wie groß die Veränderung des Wertes bei jedem klicken in die Einstellfläche sein soll.
SmallChange Legt fest, wie groß die Veränderung des Wertes bei jedem klicken auf ein Pfeilsymbol sein soll.
Max Maximalwert
Min Minimalwert
Value Startwert, aktueller Wert des Balkens


Zu beachten:
  • Der Wert kann zwischen –32768 und 32767 liegen
  • SmallChange und LargeChange dürfen nicht negativ sein
Das wichtigste Ereignis eines Balkens ist das „Change“ Ereignis. Es wird jedes Mal ausgelöst, wenn der Benutzer den Wert verändert.

Prozeduren

Allgemeines

In VB gibt es keinen Hauptteil, wie z.B. in C/C++. Alle Befehle befinden sich in VB in einer Prozedur oder einer Funktion.

Syntax

Die Syntax von Prozeduren ist:

Sub Name (Argumente)

      Befehle

End Sub
Definition

Eine Prozedur kann man bequem unter „Extras > Prozedur hinzufügen“ definieren. Man kann jedoch einfach eine Prozedur ins Programmcodefenster eintragen.

Prozeduraufruf

Jede Prozedur hat ihren eigenen (eindeutigen) Namen. Um eine Prozedur aufzurufen, braucht man nur den Namen dieser Prozedur als Befehl hinzuschreiben. Man kann das auch mit dem Call Befehl tun, den man vor den Prozedurnamen stellt.

Call Prozedurname

Argumente

Das hier ist eine kleine Prozedur, um die Caption-Eigenschaft eines Steuerelementes zu ändern:

Sub CaptionVerändern ()

      lblLabel.caption
= “Text”

End Sub
Wenn man aber andere Steuerelemente auch verändern will, so muss man Argumente einfügen. Argumente sind Werte, die beim Aufruf einer Prozedur übergeben werden.

Sub CaptionVerändern (Label As Control)

      Label.caption = “Text”

End Sub
Um die Prozedur auszuführen, braucht man jedoch noch einen Wert für das Argument Label. Dieses Argument bekommt seinen Wert erst bei der Ausführung. Der Prozeduraufruf muss so aussehen:

CaptionVerändern Label:=“lblLabel879“
Hier noch ein etwas komplexeres Beispiel:

Der Prozedur „Ausrechnen“ werden 3 Argumente übergeben. X, Y und Ausgabe.

Private Sub cmdAusrechnen_Click()

    Ausrechnen X:=txt1.text,
Y:=txt2.text, Ausgabe:=txtErgebnis

End Sub
Nun kann die Prozedur Ausrechnen Z aus X und Y berechnen und gibt sie an ein Textfeld aus. Dieses Textfeld wurde im Argument „Ausgabe“ übergeben.

Sub Ausrechnen(X As Integer, Y As
Integer, Ausgabe As Control)

    Dim Z As Integer

    Z = X + Y

    Ausgabe.text = Z

End Sub
Optionale Argumente

Argumente können auch Optional sein. Dafür muss man nur das Schlüsselwort „Optional“ vor jedes Argument stellen. Da es aber im inneren der Prozedur Probleme geben könnte, wenn ein Argument keinen Wert erhalten hat, sollte man besser einen Default-Wert setzen, falls ein optionales Argument keinen Wert hat. Dafür ist die „IsMissing“ Funktion zuständig:

Function (Optional intZahl as Integer)

      If IsMissing(intZahl) Then

            IntZahl = 66

      End If

End Function
 
Prozeduren mit einer variablen Anzahl von Argumenten

Oft ist es nützlich, wenn die Anzahl der Argumente dynamisch ist. Dies ist z.B. bei einer Funktion nützlich, welche die Summe von x-Beliebig vielen Zahlen berechnet.

Function Summe(ParamArray Zahlenfeld())
As Long

      Dim n As Integer

      For n = 0 To Ubound(Zahlenfeld)

            Summe
= Summe + Zahlenfeld(n)

      Next n

End Function
 
Nun kann man die Summe beliebig vieler Zahlen berechnen.

 

MsgBox Prompt:=“Summe: “ &
Summe(100, 150, 280, 330)

MsgBox Prompt:=“Summe: “ &
Summe(190, 1780, 17350)
 
Wert oder Referenz?

Einer Prozedur kann man ein Argument als Wert oder als Referenz übergeben. Wenn man nichts angibt, wird der Wert als Referenz übergeben.

Wenn eine Variable als Referenz übergeben wird, so wird der Prozedur nur die Speicherstelle mitgeteilt, wo sich die Variabel befindet. Falls sich diese Variabel verändert, sieht die Prozedur den neuen Wert. Wenn man das Argument jedoch als Wert übergibt, so wird die Variabel „kopiert“. Änderungen werden so nicht aktualisiert.

Um zu kontrollieren, ob ein Argument als Wert

oder Referenz übergeben wird, muss man ein Schlüsselwort voranstellen. ByVal vorangestellt bewirkt, dass das Argument als Wert übergeben wird. ByRef bewirkt, dass ein Argument als Referenz übergeben wird.

Prozedur ByVal X:=15

Prozedur ByRef X:=15
Der Gültigkeitsbereich von Prozeduren

An welchen Stellen des Programms können Prozeduren eigentlich aufgerufen werden? Wenn man nichts angibt, von überall aus. Wenn man aber eine Prozedur aus einem anderen Formular her aufrufen will, muss man den Formularnahmen vor den Prozedurnamen stellen.

Formular1.Subroutine
Um eine private Prozedur zu programmieren, muss man den „Private“ Befehl voranstellen. Bei einer Globalen Prozedur ist es der „Public“ Befehl.

Private Sub meineProzedur ()

Public Sub meineProzedur ()
Eingebaute Funktionen

Allgemeines

Visual Basic bietet eine große Funktionsbibliothek. Enthalten sind: Stringfunktionen, Umwandlugsfunktionen, Datumsfunktionen und natürlich Mathematische Funktionen. Die Funktionen können in der Visual Basic Hilfe nachgeschlagen werden, oder man schaut in der MSDN-Library nachschauen.

Mathematische Funktionen

Der Rückgabewert von Mathematischen Funktionen hat immer den Datentyp Double. Daher sollte man auch diesen Datentyp für die Variabeln verwenden. Um kompliziertere Berechnungen durchzuführen, sollte man sich die Mathematik-Toolbox BNALib von www.tereatech.com herunterladen.

Der Decimal-Datentyp bietet bis zu 25 Nachkommastellen. Er eignet sich also am besten für genaue Resultate. Um mit diesem Datentyp zu arbeiten, kann man aber keine Decimal-Variable deklarieren, man muss die Funktion CDec benutzen.

CDec(22/7)
Mit VB6 wurde auch eine Rundungsfunktion eingeführt. Diese heisst „Round“.

intZahl = Round(curZahl)
Datumsfunktionen

Datum/Uhrzeit werden in VB im Datentyp „date“ abgespeichert. Dieser Geht vom 01.01.100 bis zum 31.12.9999. Das sollte für die VB-Ära wohl reichen. Um zu überprüfen, ob ein Ausdruck ein gültiges Datum ist, kann man die „IsDate“ Funktion anwenden.

If IsDate(Datum) = True Then
...
Um herauszufinden, welcher Wochentag auf ein Datum zutrifft, oder in welcher Woche ein Datum ist, kann man die DatePart Funktion verwenden. Dieser Funktion müssen zwei Argumente übergeben werden. Das erste Argument bestimmt, was herausgelesen werden soll (Anzahl Tage, Wochen, usw.). Das zweite Argument ist das Datum.

Woche = DatePart(„ww“, „01.01.2004“)
Hier wird herausgelesen, an welcher Woche das Datum sein wird (hier Woche 1).

Manchmal will man auch herausfinden, wie viele Tage es noch dauert, bis man Geburtstag hat. Dieser Funktion muss man sogar 3 Argumente übergeben. Das erste Argument bestimmt, was herausgelesen werden soll (Anzahl Tage, Wochen, usw.). Das zweite Argument ist der Anfang der Periode , das dritte Argument das Ende der Periode.

AnzahlTage = DateDiff(„d“, Now,
„01.01.2005“)
Die Funktion berechner die Anzahl Tage, die „Jetzt“ vom 01.01.2005 trennen.

Zeichenkettenfunktionen

Um eine bestimmte Anzahl von Zeichen aus einem String rauszukopieren, hat man mehrere Funktionen zur Verfügung. Beispielstring:

Dim strText As String

strText = "Auto, Motorrad, Fahrrad“

Dim strTeil As String
Wenn man das Wort „Auto“ heraustrennen will, nimmt man am besten die „Left“ Funktion. Diese Funktion nimmt 2 Argumente entgegen. Den Mustertext und die Anzahl der Zeichen, die herauskopiert werden sollen.

strTeil = Left(strText, 4)
Hier wird das Wort „Auto“ herauskopiert. Analog zu diesem Beispiel, die Funktion Right. Diese hat den einzigen Unterschied, dass die Anzahl der Zeichen am Ende des Strings rauskopiert werden.

strTeil = Right(strText, 4)

 
Die Variable strTeil hätte nun den Wert: “rrad”.
Um Zeichen aus der Mitte der Zeichenkette zu kopieren, eignet sich die „Mid“ Funktion am besten. Das erste Argument bleibt gleich, wie bei den vorherigen Beispielen. Das Zweite Argument steht für die Stelle, wo der String beginnt. Als drittes Argument gibt man die Anzahl der Zeichen an, die ausgelesen werden sollen.


strTeil = Mid(strText, 7, 4)
 
Die Variable strTeil hat nun den Wert „Moto“ bekommen.
Das ganze bringt natürlich wenig, wenn man den String nicht kennt. Wenn man den String nach einem bestimmten Wort absuchen will, muss man die „Instr“ Funktion verwenden. Die Funktion nimmt als erstes Argument den abzusuchenden String entgegen, das zweite Argument ist ein String, nachdem man suchen will. Es wird die Position des Anfangs dieses Strings zurückgegeben.


intTeil = Instr(strText, „Motorrad“)
 
Die Variable intTeil bekommt hier den Wert als Zahl, wo „Motorrad“ beginnt. Hier hätte intTeil den Wert 7.

Wenn man ein bestimmtes Wort aus einem String heraustrennen will, aber nicht weiss, wo das Wort im String beginnt, muss man die Funktionen „Mid“ und „Instr“ verschachteln.


StrTeil = Mid(strText, Instr(strText,
„Motorrad“), Len(„Motorrad“))
 
Die Variable bekommt hier den Wert „Motorrad“ zugewiesen.

Das Null-Zeichen

Angenommen, man kopiert einen String mit einer API Funktionen irgendwoher heraus, hat dieser ein Nullzeichen am Schluss. Mit so einem String kann man in VB nicht arbeiten. Um das Nullzeichen herauszutrennen, hat VB eine Konstante namens vbNullChar bereit. So trennt man das Nullzeichen heraus:


StrTeil = Left(strText, Instr(strText,
vbNullChar)-1)
 
Dateierweiterung verändern



StrDateiname = Left(Dateiname,
Instr(DateiName, „.“)) & „[neueDateiendung]“

  
Die „Left“ Funktion mit der „Instr“ Funktion verknüpft, liest den Dateinamen bis zum Punkt aus. Die neue Dateiendung wird hinten angesetzt.

Abfragefunktionen

Mit Abfragefunktionen kann man Variablen schnell und einfach testen. Um zu überprüfen, ob eine Variable überhaupt einen Wert hat, gibt es die IsEmpty Funktion.

If IsEmpty(Variable) = true Then

      MsgBox
Prompt:=”Die Variable hat keinen Wert”

Else

      MsgBox Prompt:=“Die Variable hat
einen Wert“

End If
  
Um zu überprüfen, ob eine Variable einen numerischen Wert hat, kann man die Funktion IsNumeric verwenden.

If IsNumeric (Variable) = true Then

      MsgBox
Prompt:=”Die Variable hat einen numerischen Wert”

Else

      MsgBox Prompt:=“Die Variable hat
keinen numerischen Wert“

End If
  
Umwandlungsfunktionen

Um eine Variable zu einem anderen Datentyp umzuwandeln, kann man die „C[Datentypkürzel]“ Funktion verwenden.

curCurrency_Variable =
CCur(intInteger_Variable)

   
Zm mit Hexadezimalen Werten zu arbeiten, muss man nur ein & vor den Hexawert stellen.

 

IntZahl = & H3E8

    
Zufallszahl

Um eine Zufallszahl zu erstellen, braucht man die Rnd-Funktion. Hier wird eine Zufallszahl von 1 bis 100 erstellt.


Zufallszahl = Int(Rnd * 100) + 1
    
Der integer Variable wird eine Zufallszahl zugewiesen. (Rnd * 100) bewirkt, dass 100 verschiedene Werte ausgegeben werden können. Warum aber + 1? Ganz einfach, weil wir eine Zufallszahl zwischen 1 und 100 und nicht zwischen 0 und 99 haben wollen. Int muss vorangestellt werden, wenn wir eine Ganzzahl haben wollen.

Benutzeroberflächen

Steuerelementfelder

Wenn man ein Steuerelement mit Copy-Paste kopiert, erhält man eine Meldung; „Wollen sie ein Steuerelementfeld erstellen?“. In einem Steuerelementfeld haben alle Steuerelemente den gleichen Namen und die gleichen Eigenschaften (d.h. sie sind natürlich auch vom selben Typ). Da diese Steuerelemente aber den selben Namen haben, werden sie durch ihren „Index“ unterschieden. Angenommen, man kopiert ein Steuerelement „txtEingabe“ 9 mal, sind 10 Steuerelemente mit dem gleichen Namen auf dem Formular vorhanden. Wenn man jedem Steuerelement nun etwas zuweisen will, tut man das mithilfe des Index.


txtEingabe0.text = „Ich bin
Steuerelement 0“

txtEingabe1.text = „Ich bin
Steuerelement 1“

...

txtEingabe9.text = „Ich bin
Steuerelement 9“

     
Hier wäre eine For-Schleife angebracht:



For n = 1 to 9

      txtEingabe(n).text = „Ich bin
Steuerelement „ & n & „.“

Next

      
Wenn man sich nicht sicher ist, wo der Index der Steuerelemente liegt, kann man mit den Eigenschaften „LBound“ und „UBound“ die Grenzwerte feststellen.


For n = txtEingabe.Lbound to
txtEingabe.UBound

      txtEingabe(n).text
= „Ich bin Steuerelement „ & n & „.“

Next

       
Auch bei Ereignissen muss der Index angegeben werden:


Private Sub cmdButton_Click(Index As
integer)

      MsgBox
Prompt:=”Sie haben Button Nr “ & Index & “ gedrückt.”

End Sub

        
Mehrere Formulare benutzen

Kleinere Programme kann man bequem auf ein Formular bringen. Es wäre sogar kontraproduktiv, wenn man ein kleines Programm auf mehreren Formularen verteilen würde. Bei grösseren Projekten sind mehrere Formulare alleine schon wegen des Platzbedarfs erforderlich.

Ein neues Formular wird über „Projekt > Formular hinzufügen“ hinzugefügt. Es gibt bereits ein paar Formularmuster zur Auswahl, z.B. ein Info-Formular. Falls man eigene Formulare öfters benutzt, sollte man sie im Ordner „\Template\Forms“ abspeichern. Wenn man das Projekt nun ausführt, wird aber nur das erste Formular angezeigt. Um ein weiteres Formular aufzurufen, gibt es die „Show“ Methode.

frmZweitesFormular.Show
Um das Formular verschwinden zu lassen, gibt es die „Hide“ Methode, die das Formular nicht schliesst, sondern nur Unsichtbar macht. Wenn das Formular aber ganz geschlossen werden soll, brauch man den Befehl „Unload Me“.


frmZweitesFormular.Hide

Unload me
Modal – nicht modal

  • Ein modales Formular blockiert alle anderen Fenster. Solange dieses Formular angezeigt ist, kann nichts gemacht werden.
  • Ein nicht modales Formular kann einfach zur Seite geschoben werden, man kann bequem mit einem anderen weiterarbeiten.
  • Um zu steuern, wie ein Formular angezeigt wird, muss man der „Show“ Methode ein Argument „Modal“ übergeben. Ansonsten wird das Formular nicht Modal angezeigt.


frmFehlermeldung.Show Modal:=vbModal

frmInfobox.show Modal:=vbModeless
Auf Steuerelemente von anderen Formularen zugreifen

Der Zugriff auf Steuerelemente von anderen Formularen ist kein Problem. Man braucht nur den Namen des Formulars vor das Steuerelement zu stellen.


frmZweitesFormular.txtEingabe.text =
„Ich bin auf dem 2. Formular!“
Der Zugriff auf Variabeln aus einem anderen Formular, funktioniert nur, wenn es sich um öffentliche Variabeln handelt.

 

txtEingabe.text =
frmZweitesFormular.intPublicZahl
Wenn man ein anderes Formular anspricht, wird es geladen, aber nicht angezeigt.

Der With-Befehl

Oft muss man einem Objekt viele Werte für Eigenschaften zuweisen. Damit man nicht jedes Mal das Objekt aufführen muss, gibt es den „with“ Befehl.

 

With txtEingabe

      .Text = „Ich bin txtEingabe“

      .BackColor = vbBlack

      .ForeColor = vbWhite

      .SetFocus

End With
Es können nicht nur Eigenschaften, sondern auch Methoden aufgeführt werden.

MDI-Benutzeroberflächen

Fast alle professionellen Programme sind eine MDI-Oberfläche. In einer solchen Oberfläche, gibt es ein übergeordnetes Formular, das keine Steuerelemente besitzen kann, bis auf Menü-, Status- und Symbolleiste. Alle anderen Formulare werden dann innerhalb des Hauptformulares angezeigt. Software wie „Microsoft Word“ und die anderen Office Komponenten funktionieren alle nach diesem MDI-Prinzip. In diesem Hauptfenster werden sogenannte „Kindfenster“ angezeigt. Diese kann man im inneren des Formulares bewegen. Wenn so ein Kindfenster maximiert wird, bleibt das Hauptfenster trotzdem noch zu sehen.

Ein MDI Formular wird über „Projekt > MDI-Formular hinzufügen“ eingefügt.

Nun kann man ein weiteres leeres Formular hinzufügen. Damit es als Kindfenster angezeigt wird, muss die Eigenschaft MDIChild True sein. Wichtig beim Hauptfenster ist auch die „AutoShowChildren“, welche die Kindfenster automatisch anzeigt.

Menüleisten

Ein MDI-Fenster kann keine Steuerelemente wie Buttons, Textfelder, Labels usw. enthalten. Um mit dem Programm arbeiten zu können, ist eine Menüleiste ideal. Visual Basic stellt einen Menüleisten-Editor zur Verfügung, mit diesem kann man solche Menüleisten erstellen, welche aus den Office Programmen bekannt sind. Den Menü-Editor startet man über „Extras à Menüeditor“ oder über das Symbol in der Symbolleiste.

Die wichtigsten Eigenschaften im Überblick:

Eigenschaft Bedeutung
Caption Titel des Menüeintrags
Checked Legt fest, ob dem Menüeintrag ein Häckchen vorausgehen soll.
Enabled Legt fest, ob der Menüeintrag aktiviert werden soll.
Name Legt den Namen fest
Shortcut Legt fest, ob man den Menüeintrag per Tastenkombination aufrufen kann.
Visible Legt fest, ob der Menüeintrag sichtbar sein soll.


Eine Menüleiste kann nur auf ein „Click“ - Ereignis reagieren. Das Präfix für Menüeinträge lautet „mnu“.

Die einzelnen Schichten der Menüleiste können per Pfeiltasten verschoben werden. Die erste Schicht stellt jeweils ein Untermenü dar (Datei | Bearbeiten | Ansicht | ...). Alle tieferen Ebenen werden in diesem Untermenü angezeigt. Man kann Menüs beliebig weit verschachteln, man sollte aber nur in jedem Untermenü noch ein Untermenü machen und nicht mehr. Ein Trennstrich kann man ganz einfach machen, indem man einem Menüeintrag die Caption-Eigenschaft „-“ gibt.

Dialogfenster

Oft sieht man bei Windows-Programmen dieselben Dialogfenster, womit man z.B. eine Datei speichern oder öffnen kann. Solche Dialogfenster müssen nicht programmiert werden, sie werden von VB zur Verfügung gestellt. Um diese Dialogfenster zu verwenden, muss man das Steuerelement „Microsoft Common Dialog Control 6.0“ von „Projekt > Komponenten“ hinzufügen. Das Steuerelement wird während der Programmausführung unsichtbar bleiben. Das Präfix lautet „dlg“. Hier ein Beispiel, wie eine Datei geladen werden kann:
code> 
mnuBildLaden_Click

Dim Dateiname
as string

dlgDateiOpen.ShowOpen

Dateiname =
dlgDateiOpen.filename

End Sub
Mit dieser Prozedur kann man den Dateinamen herauslesen. Angenommen, man will ein Bild auf einem neuen Formular betrachten, kann man z.B. so vorgehen:
 
mnuBildLaden_Click

      Dim F As frmBild

Dim Dateiname
as string

dlgDateiOpen.ShowOpen

Dateiname =
dlgDateiOpen.filename

Set F = New
frmBild

F.imgBild.Picture
= LoadPicture(Dateiname)

End Sub
Der Befehl “Set F = New frmBild” dupliziert das Formular frmBild. Nun wird auf dem Steuerelement imgBild das Bild geladen.

Symbolleiste

Eine Symbolleiste ist ein ideales Steuerelement für Programmbefehle, die oft verwendet werden (Datei öffnen, Datei speichern...). Für die Symbolleiste werden Bilder verwendet. Diese Bilder können nicht direkt geladen werden, sie müssen aus einer Bildliste stammen, da die Bilder ansonsten nicht mit dem Programm mitgeliefert werden.
  1. Zuerst braucht man die Steuerelementsammlung „Microsoft Common Controls 6.0“.
  2. Nun muss man die Toolbar und die Bildliste auf dem MDI-Hauptformular anordnen.
  3. Die Symbolleiste hat das Präfix „sym“, die Bildliste erfordert keines.
  4. Bei der Bildliste im Eigenschaftsfenster doppelklick auf „Benutzerdefiniert“.
  5. Auf die Registerkarte „Abbildungen“ klicken > Bild einfügen.
  6. Nun die passende Bilder für die Symbolleiste auswählen > OK.
  7. Bei der Symbolleiste im Eigenschaftsfenster doppelklick auf „Benutzerdefiniert“
  8. Bei der Auswahlliste „Image List“ die Bildliste auswählen.
  9. Die Registerkarte „Schaltflächen“ wählen > „Schaltfläche einfügen“
  10. für „Key“ einen Schlüsselnamen eingeben
  11. Einen Wert für die Caption Eigenschaft eingeben
  12. Nun im Feld „Image“ den Index für das Bild der Bildliste eingeben (Index beginnt bei 1 und nicht bei 0).
Statusleiste

Eine Statusleiste ist nicht zwingend notwendig, sie rundet aber die Oberfläche ab. Um eine Statusleiste einzufügen, muss die Steuerelementsammlung Microsoft Common Controls 6.0 in der Toolbox liegen. Nun ordnet man die Statusleiste (StatusBar) irgendwo auf dem MDI-Fenster an (Präfix: „sta“). Nun können beliebig viele Felder eingefügt werden. Die einzelnen „Panels“ werden über ihren „Key“ angesprochen.

 staStatusBar.Panels(„[KEY]“) = „Ich bin
ein einzelnes Panel“
Man muss nicht alle Panels, die man braucht, selber programmieren. Es gibt einige vorgefertigten Panels, die man im „Benutzerdefiniert“-Fenster auswählen kann (Style-Eigenschaft).

Der Zeitgeber

Der Zeitgeber ist ein unscheinbares Steuerelement in der Werkzeugsammlung. Er hat nur ein Ereignis – „Timer“. Alle paar Millisekunden (interval-Eigenschaft) wird dieses Ereignis aufgerufen. Um die Uhrzeit anzeigen zu lassen, muss der Timer auf dem Formular angeordnet sein (er wird während der Laufzeit unsichtbar bleiben). Hier der Befehl, um die Uhrzeit auf einem label anzeigen zu können.


Private Sub tmrTimer_Timer()

lblUhrzeit.Caption
= Format(Time, „Long Time“)

End Sub
Je kleiner das Interval list, desto genauer läuft die Uhr. Man kann zwar einen Intervall von 1 ms eingeben, der eingebaute PC-Timer hat jedoch nur einen Intervall von 53 ms. Das sollte aber an Genauigkeit reichen.

Fehler auffangen

In Visual Basic gibt es drei Arten von Fehlern:

1. Syntaxfehler
Diese Fehler sind in VB absolut harmlos. Die Benutzerumgebung korrigiert diese automatisch, man kann gar keinen Fehlerhaften Code kompilieren à Syntaxfehler können nicht zum Benutzer gehen.

2. Laufzeitfehler
Solche Fehler können in der Entwicklungsphase nicht auftreten. Sobald man das Programm startet, können diese auftreten (Deswegen: Testen). Der häufigste Laufzeitfehler ist wohl „Überlauf“. Ein Überlauf entsteht dann, wenn man eine zu große Zahl an eine zu kleine Variable zuweisen will. Diese Probleme kann man mit Eingabeprüfungen auffangen. „Typen Unverträglich“ kommt auch häufig vor. Dieser Laufzeitfehler entsteht, wenn man z.B. einen Buchstaben an eine Integer-Variable zuweisen will. Das Problem an den Laufzeitfehlern: Das Programm stürzt sofort ab!

3. Logische Fehler
Ein Programm kann jahrelang korrekt laufen, bis eines Tages eine Verkettung von Situationen das Programm zu fehlerhaften Ausgaben bringt. Hier muss man ausgiebig testen und überprüfen.

Laufzeitfehler abfangen

Laufzeitfehler bringen das Programm zum Absturz und beenden es, ohne das der Benutzer seine Daten abspeichern kann. In VB gibt es jedoch sog. „Fehlerbehandlungsroutinen“, welche das Programm nicht zum Absturz bringen.

Der „On-Error“ Befehl

Es gibt drei Arten vom „On-Error“ Befehlen:

1. On Error Goto [Sprungmarke]

2. On Error Resume Next

3. On Error Goto 0

Die am meisten verwendete Variante des „On Error“ Befehls ist „On Error Goto [Sprungmarke]“. So kann eine Prozedur aussehen, in der ein Fehler abgefangen werden soll:
  1. Private Sub cmdButton_Click()
  2. On Error GoTo Fehlerbehandlung:
  3. Dim intZahl1 as Integer
  4. intZahl1 = txtEingabe.Text
  5. Exit Sub
  6. Fehlerbehandlung:
  7. MsgBox Prompt:=“Es ist ein Fehler aufgetreten“, Title:=“Fehler“
  8. End Sub
Erklärungen zu den Befehlen:
  1. Wenn die Schaltfläche cmdButton angeklickt wird
  2. Bei einem Laufzeitfehler soll das Programm zu „Fehlermeldung“ springen
  3. Eine Integer-Variable wird deklariert
  4. die Variable bekommt den Wert von txtEingabe
  5. Die Subroutine wird verlassen, wenn alles funktioniert hat
  6. Sprungmarke „Fehlerbehandlung“
  7. Es wird eine Fehlermeldung ausgegeben
  8. Hier ist die Subroutine auch zu Ende, wenn ein Fehler aufgetreten ist.
Entfernt man Zeile 2 des Programmcodes, wird keine Fehlerbehandlungsroutine ausgeführt. Wenn man nun eine zu hohe Zahl in das Textfeld eingibt und den Button drückt, wird es einen Laufzeitfehler geben und das Programm stürzt ab. Wenn Zeile 2 aber mitprogrammiert wurde, kommt nur eine kleine MessageBox, das Programm verlässt die Subroutine.

Err.Number

Angenommen, der Benutzer gibt bei obigem Beispiel eine zu große Zahl ein. Nun kommt immer die gleiche Fehlermeldung, es sei ein Fehler aufgetreten. Der Benutzer weiss jedoch nicht, was er anders machen soll. Um Laufzeitfehler gezielt abfangen zu können, muss man beachten, welcher Laufzeitfehler aufgetreten ist. Dazu gibt es die die VB Konstante Err.Number. Am besten programmiert man eine „Select-Case“ Schleife die prüft, welcher Fehler aufgetreten ist. Hier muss man die Nummern der Laufzeitfehler kennen.

Fehlernummer Fehler Erklärung
6 Überlauf Eine Variable wird zu gross
7 Zu wenig Speicher vorhanden Es ist zu wenig RAM vorhanden
9 Index ausserhalb des gültigen Bereiches Der Index eines Arrays wurde nicht richtig definiert, man arbeitet mit undefinierten Indizes
11 Division durch 0 Es wird eine Zahl durch 0 definiert
13 Typen unverträglich Wenn man z.B. Text in eine Integer Variable speichern will
52 Dateiname falsch Wenn man mit einer Datei arbeitet, die nicht existiert.
53 Datei nicht gefunden
71 Diskette nicht bereit Es wurde keine Diskette eingelegt
94 Verwendung von NULL unzulässig Eine Variable hat keinen Wert (den Wert [NULL])


Diese Fehler treten am häufigsten auf. Hier die Erweiterung des obigen Programmes:

 Private Sub cmdButton_Click()

On Error GoTo
Fehlerbehandlung:

Dim intZahl1
as Integer

intZahl1 =
txtEingabe.Text

Exit Sub

Fehlerbehandlung:

      Select Case Err.Number

            Case 6

MsgBox Prompt:=“Die Variable ist zu gross“, _ Title:=“Variable zu
gross“

            Case 13

MsgBox Prompt:=“Sie haben Text eingegeben“, _ Title:=“Typen
unverträglich“

            Case Else

MsgBox Prompt:=“Irgendein Fehler“, _ 

Title:=“Fehler“

      End Select

End Sub
Nun wird der Benutzer gezielt auf seine Falscheingabe hingewiesen.

Fehlersuche

Um logischen Fehlern vorzubeugen, muss man oft Sachen überprüft werden, wie z.B. Werte von Variabeln. Dazu eignet sich am besten das Debug-Fenster, unten zu finden. Um den Wert von Variable intZahl auszugeben, kann man so vorgehen:


Debug.Print intZahl

 
Und schon sieht man unten im Debug Fenster die Zahl. Debug-Anweisungen werden nicht kompiliert, sie müssen also weder auskommentiert, noch gelöscht werden, bevor man eine .exe erstellt.

Mit F8 kann das Programm im Einzelschrittmodus getestet werden. Bei jedem Druck auf F8 wird der nächste Befehl ausgeführt.

Dateizugriff

Warum auf Dateien zugreifen?

Um Werte in einem Programm abspeichern zu können, verwendet man Variabeln. Wenn man aber Werte dauerhaft abspeichern will, reichen Variabeln nicht mehr aus. Sobald die Prozedur verlassen wird, verliert die Variabel ihren Wert (wenn sie nicht global ist). Ansonsten verliert sie ihren Wert spätestens dann, wenn das Programm beendet wird. Damit man Werte dauerhaft speichern kann (wie z.B. Optionen, wie ein Benutzer die Software für sich persönlich konfiguriert), muss man die Werte in Dateien abspeichern, wo man sie danach wieder herauslesen kann.

Wie funktioniert der Zugriff?

Der Dateizugriff läuft immer nach dem gleichen Schema ab:
  1. Holen einer freien Dateizugriffsnummer über die „FreeFile“-Funktion
  2. Öffnen der Datei mit dem „Open“-Befehl
  3. Zugriffsmodus auswählen (Input, Output, Append, Random, Binary)
  4. Schreiben oder Lesen der Daten (Input, Write, Get, Put)
  5. Schliessen der Dateiverbindung
In VB gibt es drei Möglichkeiten auf eine Datei zuzugreiffen:
  1. Sequentiell
    Zum abspeichern von Strings
  2. Random
    Zum abspeichern von Datensätzen
  3. Binär
    Zum abspeichern von Zahlen
Der „Open“-Befehl

Um mit Dateien arbeiten zu können, muss zuerst eine Verbindung zwischen VB und der Datei hergestellt werden. Hier muss man die Zugriffsnummer und den Zugriffsmodus angeben.


Open “C:\textfile.txt” For Input As 1
Hier wird die Datei “C:\textfile.txt” für den Modus “Input” mit der Verbindungskennung 1 geöffnet. Diese Kennung ist notwendig, da sonst das Betriebssystem nicht weiß, wo sich die Verbindung zur Datei im Speicher befindet. Um Daten in eine Datei schreiben zu können, muss „Output“ oder „Append“ verwendet werden. Mit „Append“ werden die Daten angehängt.

Wenn man eine Datei für „Output“ öffnen will und diese nicht existiert, kommt kein Laufzeitfehler! Die Datei wird erstellt. Das ist sehr praktisch, kann aber auch zu Problemen führen, wenn man mit den falschen Files arbeitet und es nicht merkt.

Eine Übersicht über die Zugriffsmodi;

Modus Bedeutung
Input Datei wird für Lesezugriffe geöffnet.
Output Datei wird für Schreibzugriffe geöffnet
Append Zu schreibende Daten werden angehängt
Binary Datei wird für Lese- und Schreibzugriffe geöffnet, dazu muss man die Befehle Get und Put verwenden
Random Entspricht Binary, nur dass man die Datensatznummer eingeben muss


Man sollte die Zugriffsnummer nie manuell programmieren! Falls diese Zugriffsnummer schon besetzt ist, wird das Programm abstürzen. Die Funktion „FreeFile“ sucht eine freie Verbindungskennung aus und gibt die Kennung wieder frei, wenn die Verbindung nicht mehr verwendet wird.
 

Dim intVerbindungsnummer As Integer

intVerbindungsnummer = FreeFile

Open [Datei] For Input As
intVerbindungsnummer
Dateien werden jeweils mit dem „Close“-Befehl geschlossen.

Einlesen und Abspeichern von Daten

Das Öffnen und Schließen der Datei ist nur ein Formalismus, der aber trotzdem nicht fehlen darf. Interessant wird es erst, wenn Werte eingelesen und abgespeichert werden können.

Die wichtigsten Befehle:

Befehl Beispiel Bedeutung
Print Print #DateiNr,
txtEingabe.Text
Schreibt eine Zeichenfolge in die Datei.
Write Write #DateiNr,
txtEingabe.Text
Wie bei „Print“, nur dass einzelne Elemente automatisch mit einem Komma getrennt und in „“ gesetzt werden
Input Input #DateiNr, Temp Liest eine Zeichenkette aus einer Datei
Line Input Line Input #DateiNr, Temp Datei wird bis zum Zeilenumbruch gelesen
Input-Funktion txtEingabe.Text = Input(DateiNr,10) Lies eine bestimmte Anzahl Bytes aus einer Datei


Beispiele

Sequentiell abspeichern

Private Sub cmdSpeichern_Click()

    Dim DateiNr As Integer

    DateiNr =
FreeFile

    Open "neu.sav" For Output
As DateiNr

        Print
#DateiNr, txtEingabe.Text

    Close

End Sub

 
Sequentiell einlesen

Hier ist zu beachten, dass man den „Umweg“ über eine Variable nehmen muss


Private
Sub cmdLesen_Click()

   
Dim DateiNr As Integer

   
Dim TEMP As String

   
DateiNr = FreeFile

   
Open "neu.sav" For Input As DateiNr

       
Input #DateiNr, TEMP

       
txtEingabe.Text = TEMP

   
Close

End
Sub

 
Portionenweises Einlesen von Text

Oft will man nicht den gesamten Inhalt einer Datei einlesen, sondern nur ein paar Bits. Mit der „Input“ Funktion kann man eine bestimmte Anzahl von „Bits“ einlesen, mit der „Line Input“ Funktion jeweils ganze Zeilen.

Die Input Funktion

Der Input Funktion müssen zwei Werte übergeben werden. Die Zugriffsnummer und die Anzahl der zu lesenden Zeichen. Um die Größe der geöffneten Datei zu erfahren, kann man mit der Funktion „Lof“ die Anzahl der Bytes herauslesen.

Eine Übersicht der Funktionen, die mit der Länge von Dateien zu tun haben:

Funktion Beispiel Bedeutung
Lof Lof(DateiNr) Gibt die Grösse der geöffneten Datei zurück
FileLen FileLen(Dateiname) Gibt die Grösse einer beliebigen Datei zurück
Eof Eof(DateiNr) Gibt „True“ zurück, wenn der Lesebefehl das Ende der Datei erreicht hat
Loc Loc(DateiNr) Gibt die Position des Dateizeigers an (wo gerade gelesen wird)


Zahlen speichert man grundsätzlich mit dem „Write“ Befehl, da dieser zwischen Datentypen unterscheiden kann. Bei Zahlen muss man jedoch den Umweg über eine Zahlenvariable nehmen, da aus einem Textfeld nur ein String kopiert werden kann.

Wenn man eine Datei mit „Print“ beschrieben hat, wird nach jedem Element ein Zeilenumbruch gemacht. Um diese Datei Zeile für Zeile auszulesen, nimmt man den „Line Input“ Befehl.

Private Sub cmdLesen_Click() 
Dim DateiNr As Integer 
Dim TEMP As String 
DateiNr = FreeFile 
Open "neu.sav" For Input As DateiNr 
Do while Not EOF(DateiNr) 
Line Input #DateiNr, TEMP 
txtEingabe.Text = txtTextfeld.Text & TEMP 
Loop 
Close 
End Sub 
Die Datei wird Zeilenweise eingelesen, solange der Zeiger noch nicht am Ende angekommen ist (while Schleife).

Umgang mit Zahlen

Get und Put

Binäre Dateien liest man mit dem “Get” Befehl aus und beschreibt sie mit dem “Put” Befehl. Zur Erläuterung der Befehle ein Beispiel. Es werden drei Zahlen in eine Datei geschrieben:

Dim DateiNr As Integer 
DateiNr = FreeFile 
Dim Wert1 As Double, Wert2 As Single, Wert3 As Integer 
Wert1 = 187644.937 
Wert2 = 18.9 
Wert3 = 16 
Open "test.txt" For Binary As DateiNr 
Put DateiNr, , Wert1 
Put DateiNr, , Wert2 
Put DateiNr, , Wert3 
Close DateiNr 
Das Programm initialisiert drei Variabeln von verschiedenen Zahlendatentypen. Danach wird die Datei wie immer geöffnet. Der „Put“ Befehl speichert dann die Werte in die Datei. Am Schluss wird die Datei wie immer geschlossen.
Das Herauslesen mit Get funktioniert exakt gleich, nur dass man den Befehl Get an die Stelle von Put schreibt.

Umgang mit Dateien

In Visual Basic kann man nicht nur Informationen aus Daten rausholen oder in Dateien speichern, sondern auch Dateien und Ordner erstellen, löschen und verschieben. Die wichtigsten Befehle im Überblick:

Befehl Bedeutung
MkDir Legt ein neues Verzeichnis an
ChDir Setzt aktuelles Verzeichnis auf ein anderes
Kill Löscht eine geschlossene Datei
FileCopy Kopiert eine Datei
Name Benennt Datei/Ordner um
RmDir Entfernt ein leeres Verzeichnis


Um noch mehr Befehle verwenden zu können, muss man API Funktionen aus SHELL32.DLL benutzen.

Dialogfelder

VB stellt vieles zur Verfügung, darunter sind auch Dialogfelder. Um mit den Dialogfeldern arbeiten zu können, muss man unter „Projekt >> Komponenten“ das Steuerelement „Microsoft Windows Common Dialog Control 6.0“ miteinbeziehen. Das Steuerelement kann nun an einem beliebigen Ort auf dem Formular angeordnet werden (Präfix: cdl). Die wichtigsten Methoden des Steuerelementes im Überblick:

Dialogfeld Methode (vom cdlDialog Objekt)
Datei öffnen ShowOpen
Datei speichern ShowSave
Farbe ShowColor
Schriftattribute ShowFont
Drucker ShowPrinter


Wenn man das Steuerelement mit der rechten Maustaste anklickt, und unter Eigenschaften geht, kann man viele Einstellungen verändern. Das ganze ist natürlich auch während der Laufzeit möglich.

Ein Beispiel für ein Dialogfeld, um Dateien zu öffnen.

Dim strDateiname As String 
cdlDialog.InitDir = "C:\Programme\" 
cdlDialog.Filter = "*.ini|*.INI|" 
cdlDialog.DialogTitle = "Öffnen von .ini Files" 
cdlDialog.ShowOpen 
strDateiname = cdlDialog.FileName 
Erklärungen:

Eine String-Variable für den Dateinamen wird deklariert 
Es wird festgelegt, welchen Ordner eingesehen wird 
Mit der Filter-Eigenschaft wird festgelegt,
welche Dateien geöffnet werden können 
Der Titel des Dialogfeldes wird bestimmt 
Das Dialogfeld wird geöffnet 
Die Variable strDateiname bekommt den Wert des ausgewählten Files 
Um die Datei zu öffnen, muss man je nach Datentyp andere Befehle verwenden. Das Dialogfeld sieht in diesem Beispiel so aus:




Grafiken

Allgemeines

VB bietet nur ein paar wenige Methoden für Grafiken. Es besteht aber auch die Möglichkeit, Grafiken mit DirectX oder OpenGL darzustellen. Letzteres zu erlernen lohnt sich nur für Grafikprofis.
Mit den wenigen Steuerelementen kann man auch nur auf dem Formular, dem Bildfeld und auf den Drucker zeichnen. Wenn man Grafiken auf andere Steuerelemente ausgeben will, muss man API Funktionen aufrufen.

Die Grafikmethoden im Überblick

Methode

Syntax

Erklärung

Circle (x, y), Radius, Farbe, Start, Ende, Aspekt Zeichnet eine Ellipse/einen Kreis. Aspekt steht für den Rundungsfaktor
Line [Step] (x1, y1)-[Step] (x2, y2), Farbe, BF Linie oder Rechteck zeichnen. Argument B macht ein Rechteck daraus, Argument F füllt das Rechteck mit der Farbe aus.
PSet [Step] (x, y), [Farbe] Zeichnet einen einzelnen Punkt
Point (x, y) Ermittelt den RGB Wert eines Punktes


Ausgabe

Die Ausgabe findet entweder auf dem Formular, im Bildfeld oder auf den Drucker statt. Als Koordinaten kann man alles von (0, 0) bis (Breite, Höhe) angeben. Was passiert aber, wenn man das Steuerelement in der Grösse verändert? Man muss den Programmcode ändern.
Um das zu vermeiden, sollte man ein eigenes Koordinatensystem für jedes Steuerelement machen. Das kann man ganz einfach mit der Scale Methode machen. Hier die Syntax für die Einteilung eines Bildfeldes in 100x100 Punkte:

picBildfeld.Scale (0, 0) – (100, 100)




ScaleHeight, Gibt den inneren Y Punkt des Bildfelds an 
ScaleWidth, Gibt den inneren X Punkt an 
ScaleLeft, Gibt den X Abstand vom Formularrand an 
ScaleTop, Gibt den Y Abstand vom Formularrand an 
ScaleWidth, Gibt den inneren X Punkt des Formulars an 
ScaleHight, Gibt den inneren Y Punkt des Formulars an 
Height, Gibt den Y Punkt des Gesamten Formulars zurück 
Width, Gibt den X Punkt vom ganzen Formular zurück 
Statt den Absoluten Koordinaten kann man auch relative Koordinaten und den relativen Unterschied (Step X, Step Y) statt (X, Y) angeben.

Die aktuelle Position findet man den Eigenschaften „CurrentX“ und „CurrentY“ heraus.

Ausgaben formatieren

Eigenschaft Bedeutung
DrawMode So wird das Muster der Linie an den Hintergrund angepasst (Werte 1-16)
DrawStyle Die Linie wird durchzogen oder gestrichelt, 7 Modi
DrawWidth Legt die Breite einer Linie von 1 bis 32767 Pixel fest
FillColor Die Füllfarbe von Kreisen, Rechtecken wird festgelegt
FillStyle Legt den Stil fest, wie das Objekt ausgefüllt wird, 8 Modi


Farben

In Windows, somit auch in VB, werden Farben mit dem RGB (Red, Green, Blue) Wert dargestellt. Jede Grundfarbe kann hier einen Wert zwischen 0 und 255 annehmen, d.h. es gibt dreimal 255 Möglichkeiten >> man kann 255^2 Farben darstellen. Farben werden in VB als long gespeichert.

Um mit Hexa-Farbwerten arbeiten zu können, muss man vor die Hex-Zahl &H voranstellen, damit sie als Hex-Wert erkannt wird.

Um eine Farbe direkt an ein Steuerelement zuzuweisen, kann man die RGB Funktion benutzen.

frmHauptformular.BackColor = RGB(255,0,155) 
Wenn einem 16 Farben genügen, kann man den QBColor-Befehl nutzen.

frmHauptformular.BackColor = QBColor([0-16]) 
Für diese 16 Farben gibt es auch Konstanten, z.B. vbRed für Rot, vbBlack für schwarz usw.

Bilder anzeigen

Fast jedes Steuerelement hat eine „Picture“ Eigenschaft. Ein Bild kann man also auf den meisten Steuerelementen so anzeigen lassen:

Steuerelement.Picture = „C:\Bilder\Bild.bmp“ 
picBildfeld.Picture = LoadPicture(„C:\Bilder\Bild.bmp“) 
Um Bilder abspeichern zu können, kann man den “SavePicture” benutzen. Nun ist es bereits möglich, ein einfaches Zeichenprogramm zu programmieren. Man muss nur die PSet Methode mit dem MouseMove Ereignis verknüpfen.

Das Abspeichern von Bildern (bzw. Bildfeldern) ist auch nicht besonders schwer.

SavePicture picZeichenfläche.Image, „Bild.bmp“ 
Wenn man aber ein Bild an einer bestimmten Position anzeigen lassen will, funktioniert der obere Befehl nicht mehr, da er die Bilder links oben platziert. Dazu stellt VB die PaintPicture Methode zur Verfügung. Das komische an dieser Methode ist, dass sie keine Bilder laden kann, sondern dass man die Picture Eigenschaft von anderen Objekten übernehmen muss. Die Argumente in den Eckklammern sind optional.

Objekt.PaintPicture Picture, X1, Y1, [Breite1], [Höhe1],
[X2], [Y2], [Breite2], [Höhe2], [Ropcode]
Argumente im Überblick

Argument

Bedeutung

Picture Legt über die Picture Eigenschaft eines anderen Objekts das anzuzeigende Bild fest.
X1, Y1 Die Koordinaten, wo die linke obere Ecke auf dem Bildfeld angezeigt werden soll.
Breite1, Höhe1 Die Höhe und Breite des Bildes. Das Bild wird ggf. gestreckt.
X2, Y2 Die Koordinaten, wo die rechte untere Ecke auf dem Bildfeld angezeigt werden soll.
Breite2, Höhe2 Legt die Breite und Höhe des Objektes fest, in welchem es angezeigt werden soll.
Ropcode Legt fest, wie die Quelle mit dem Bildfeld kombiniert wird.


Ausgabe auf Drucker

Das Drucken in VB wird über das Printer-Objekt gesteuert. Mit dem Printer Objekt kann man nicht nur ausdrucken, man kann auch erfahren wie viele und welche Drucker man installiert hat. Wichtig: Alles was mit Druckern zu tun hat, wird über die Printers Klasse angesprochen, Ausdrucke erfolgen durch das Printer Objekt der Klasse Printers. Dazu ein Beispiel:

Dim n As Integer 
For n = 0 To Printers.Count - 1 
lstDrucker.AddItem (Printers(n).DeviceName) 
Next 
Hier wird eine Liste mit allen verfügbaren und installierten Druckernamen gefüllt.

Die Ausgabe von Text auf den Drucker ist nicht sehr sensationell, dafür einfach. Folgende Anweisung gibt einen String auf den Drucker aus. Mit der darauf folgenden Anweisung wird dem Drucker mitgeteilt, dass der Drucker hier nun aufhören soll.

Printer.Print „Dieser Text wird auf den Drucker ausgegeben.“ 
Printer.Enddoc 
Die Z-Achse

Die Z-Achse dient (leider) nicht dazu, 3 dimensionale Grafiken auszugeben, sie gibt nur an, ob sich ein Objekt im Vordergrund oder im Hintergrund befindet. Hier gibt es nur zwei Zustände – 1 und 0.

Objekt.ZOrder [1/0] 
Beim Wert 1 wird das Objekt in den Vordergrund gebracht, beim Wert 0 in den Hintergrund.

Bildschirmauflösung feststellen

Die Bildschirmauflösung bekommt man in VB, wenn man die Widht Eigenschaft des Screen Objektes durch die TwipsPerPixelX Eigenschafts des gleichen Objektes dividiert. Das kann z.B. so aussehen:

Private Sub Form_Load() 
txtWidth.Text = Screen.Width 
txtHeight.Text = Screen.Height 
txtTwipsPerPixelX = Screen.TwipsPerPixelX 
txtTwipsPerPixelY = Screen.TwipsPerPixelY 
txtPixelX.Text = Screen.Width / Screen.TwipsPerPixelX 
txtPixelY.Text = Screen.Height / Screen.TwipsPerPixelY 
End Sub
Zur Verdeutlichung das Ergebnis bei einer 1024x768 Auflösung.




Auto Redraw?

Die Auto Redraw Eigenschaft einer Ausgabefläche gibt an, ob der Inhalt in den Arbeitsspeicher geladen werden soll (true) oder nicht (false). Bei false wird das Bildfeld geleert, wenn man es mit einem anderen Objekt überdeckt.

API-Funktionen

Allgemeines

In Visual Basic hat man recht viele Funktionen zur Verfügung. Was macht man aber, wenn man z.B. erfahren will, wie viel Arbeitsspeicher ein PC hat? Dazu gibt es keine VB Funktionen. Um solche Informationen herauslesen zu können, muss man fest eingebaute Windows Funktionen (sog. API Funktionen) aufrufen. Ein Vorteil von VB gegenüber C/C++ ist, dass man relativ wenige API Funktionen benötigt, da man viele Module einfach verwenden kann (z.B. Standarddialogfelder, welche man in C/C++ durch API Befehle aufrufen muss).
API Funktionen werden jeweils in .dll Dateien gespeichert.

Es gibt auch „gefährliche“ API Funktionen, mit denen man z.B. Laufwerke formatieren, die Registry verwenden oder andere Systemnahe Dinge verändern kann >> Man sollte nur die Funktionen aufrufen, die man kennt. Um zu erfahren, was die einzelnen API Funktionen tun, muss man sich spezielle Bücher besorgen oder in einem API-Viewer nachschauen.

Der Aufruf von API Funktionen

Um API Funktionen verwenden zu können, muss man das dem Compiler mit einem „Declare“ Befehl angeben. Dieser Declare Befehl teilt VB vier wichtige Dinge mit:
  • Name der Funktion/Prozedur
  • Name der DLL
  • Anzahl der Argumente
  • Datentyp des Rückgabewerts
Eine Deklaration einer Prozedur sieht syntaktisch so aus:

[Public|Private] Declare Sub Name Lib „Libname“
[Alias „Aliasname“] _ [Argumente] 
Die Syntax für eine Funktion erfordert zusätzlich den Datentyp des Rückgabewertes:

[Public|Private] Declare Sub Name Lib „Libname“
[Alias „Aliasname“] _ [Argumente] [As Datentyp] 
Der Aliasname ist nichts weiteres als der wahre Name einer Funktion. Man weisst einen Aliasnamen zu, wenn der Originalname zu lang und schlecht merkbar ist oder wenn man einen Namenskonflikt vermeiden möchte.

Der API Viewer

Damit man sich die Informationen für API Deklarationen nicht zusammensuchen muss, sollte man einen sog. API Viewer benutzen. So ein Programm stellt alle nötigen Informationen zur Verfügung. Zu empfehlen ist ganz besonders der „API-Guide“ von http://www.allapi.net.

Auf die Registry zugreifen

Bevor man mit Programmen auf die Registry zugreift, sollte man unbedingt ein Registry Backup machen! Die Registry dient nicht dazu, grosse Datenmengen aufzunehmen. Mithilfe dieser Datenbank kann man Einstellungen und Konfigurationen abspeichern, welche wenig Platz benötigen.

Visual Basic hat bereits zwei Registry Befehle, diese speichern die Schlüssel jeweils immer in den gleichen Unterordner. Um weitgehende Einstellungen an Windows oder an Programmen vorzunehmen, muss man auf die entsprechende .dll zugreifen.

Eine Übersicht über die wichtigsten Registry Funktionen:

Funktion Bedeutung
RegCloseKey Schliesst Zugriff auf einen Schlüssel
RegCreateKeyEx Öffnet (oder erstellt, falls nicht vorhanden) einen Schlüssel
RegDeleteKey Löscht einen Schlüssel
RegEnumKeyEx Gibt alle Unterschlüssel zurück
RegEnumValue Gibt die einzelnen Werte eines Schlüssels zurück
RegOpenKeyEx Öffnet einen Schlüssel für den Zugriff
RegQueryValueEx Liest den Wert eines Eintrags ein
RegSaveKey Speichert Schlüssel & Unterschlüssel in der angegebenen Datei
RegSetValueKey Verändert Wert oder Name eines Schlüssels


Die Deklarationen können im API-Guide nachgeschaut werden.

Der API Guide von http://www.allapi.net sollte für die Verwendung von API Funktionen ausreichen, weitere Beispiele und Erläuterungen werde ich unterlassen. Klassen

Hier geht es um objektorientierte Programmierung. Ein Objekt ist bekanntlich alles, was Methoden und/oder Eigenschaften besitzt. Eine Methode ist eine Funktion, welche nur für das aktuelle Objekt gültig ist. Eigenschaften gehören jedem einzelnen Objekt, auch wenn es Objekte gibt, die sich Eigenschaften teilen (z.B. haben Command-Buttons und Labels beide die Caption-Eigenschaft...). Objekte können auch Ereignisse besitzen. Das macht vor allem bei Steuerelementen Sinn.

Objekte können z.B. Steuerelemente sein, aber auch Objekte wie z.B. das „Debug“ oder das „Printers“ Objekt. Solche Objekte (hier geht es nicht um Steuerelemente) lassen sich mit Klassen nachbilden. Diese Objekte dienen wiederum dazu, die Wirklichkeit nachzustellen. Eine Klasse ist der Typ eines Objekts, ein Objekt ist ein Element einer Klasse.

Klassen hinzufügen

Eine Klasse kann durch den Menübefehl „Projekt >> Klassenmodul hinzufügen“ hinzugefügt werden.




Diese Klasse ist am Anfang noch leer. Nun geht es darum, für die neue Klasse Eigenschaften, Methoden und Ereignisse zu definieren. Das Prinzip der Klassen ist relativ einfach zu verstehen, aber eher schwer zu erlernen und umzusetzen.

Eigenschaften hinzufügen

Damit man bei einem Objekt mit Eigenschaften arbeiten kann, müssen diese mit den Befehlen „Property Let“ (für Einlesen der Eigenschaft) und „Property Get“ (zum Auslesen der Eigenschaft) definiert werden. Eigenschaften müssen in einer Klasse intern in einer Variabel abgespeichert werden. Hier ein Beispiel dazu.

Private intMenge As Integer 

Property Let Anzahl(Menge As Integer) 
 intMenge = Menge
  End Property 

	Property Get Anzahl() As Integer 
	Anzahl = intMenge
  End Property 
Erläuterung:
  • Es wird eine Variabel vom Typ Integer deklariert, welche die Anzahl aufnehmen kann.
  • Nun wird mit dem „Property Let“ Befehl das Argument „Menge“ entgegengenommen. Wenn die Eigenschaft aufgerufen wird, wird das Argument „Menge“ übergeben.
  • Die interne Variable intMenge speichert nun den Wert des Arguments „Menge“ ab.
  • Wenn die Eigenschaft nun abgefragt wird, bekommt Anzahl den Wert von intMenge.
Dazu muss man auch den Aufruf der Eigenschaft beachten:

Private Sub cmdAnzahlBestimmen_Click() 
Dim Hunde As Hundehütte
Set Hunde = New Hundehütte 
Hunde.Anzahl = 50
  End Sub 
Erläuterung:
  • Das Ereignis tritt auf, wenn der Button “cmdAnzahlBestimmen” angeklickt wird.
  • Hier wird das Objekt „Hund“ von der Klasse „Hundehütte“ bestimmt.
  • Nun wird „Hund“ ein Objekt der Klasse Hundehütte
  • Die Eigenschaft Anzahl wird aufgerufen und bekommt einen Wert. Hier verzweigt das Programm auf das Klassenmodul.
Methoden hinzufügen

Das Hinzufügen von Methoden gestaltet sich nicht schwieriger als die Definition von Funktionen. Der Funktionsaufruf erfolgt nun genau gleich wie eine „herkömmliche“ Methode. Zur Veranschaulichung wieder ein Beispiel:

Private Sub cmdBellen_Click() 
Dim Hund As Hundehütte 
Set Hund = New Hundehütte 
Dim WieOft As String 
WieOft = InputBox(Prompt:="Bitte geben Sie ein, wie oft der Hund bellen soll.", _ 
Title:="Bellen") 
Hund.Bellen (WieOft) 
End Sub 
Auf den ersten zwei Zeilen erfolgt wie immer die Definition des neuen Objekts. Auf der Zeile 3 wird eine Variable deklariert, welche dann die Eingabe aus einer InputBox entgegennimmt. Auf Zeile 6 wird nun die Methode Bellen aufgerufen:

Function Bellen(Anzahl As Integer) As Integer 
Dim n As Integer 
For n = 1 To Anzahl 
MsgBox Prompt:="Wuff", Title:="Ich bin ein Hund" 
Next 
End Function 
Um mit Klassen arbeiten zu können, sollte man also Prozeduren gut beherrschen!

Ereignisse hinzufügen

Die Definition eines Ereignisses ist relativ einfach. Man braucht nur das Schlüsselwort Event mit dem Ereignisnamen und der Parameterliste aufzuführen.

Event Einschlafen(Einschlafzeit As String) 
Dieses Ereignis tritt nicht einfach so aus heiterem Himmel ein, es muss in einer weiteren Ereignisprozedur aufgeführt werden, da ein imaginärer Hund nicht von selber einschlafen kann. Nehmen wir mal an, man kann auf eine Schaltfläche klicken und er Hund schläft ein.

Private Sub cmdEinschlafen_Click() 
Dim Hund As Hundehütte 
Set Hund = New Hundehütte 
Hund.Einschlafen ("18.59") 
End Sub 
Das Problem hier ist noch, dass man nicht direkt auf das Ereignis zugreifen kann, sondern dass man mit einer weiteren Methode zu der Klasse verzweigen muss.

Function Einschlafen(Uhrzeit As String) 
RaiseEvent Einschlafen("")
MsgBox prompt:="Ihr Hund ist um " & Uhrzeit & " eingeschlafen.", _ 
Title:="Gute Nacht" 
End Function 
Das eigentliche Ereignis tritt erst durch den „RaiseEvent“ Befehl ein. >> Der Umgang mit Ereignissen ist bei eigenen Klassenmodulen nicht immer empfehlenswert, da man nicht direkt auf natürliche Ereignisse reagieren kann, wie z.B. einen Mausklick. Man muss vielmehr auf eine Methode verzweigen, mit welcher man das Problem eben so gut direkt lösen könnte.

Wer mit Klassen arbeiten will, muss viel üben und probieren. Die Programmierung mit Klassen unterscheidet sich bis auf wenige Befehle nicht von der normalen VB Programmierung. Damit man Ereignisse effektiv einsetzen kann, sollte man gleich eigene ActiveX Steuerelemente programmieren, da Klassen nicht auf natürliche Ereignisse reagieren können.

Zugriff auf Datenbanken

Wer mit Datenbanken arbeiten will, sollte sich als erstes mit Datenbankstrukturen (vor allem mit dem Relationalen Datenbanksystem) auseinandersetzen. Da der Datenbankzugriff in Visual Basic nur mit Steuerelementen nicht reicht um auf relationale Datenbanken zuzugreifen, sollte man auf SQL (Structured Query Language) zurückgreifen. Das SQL Datenbanksystem ist führend, da es schnell, stabil und unter anderem auch Freeware ist (mySQL,...). Es gibt jedoch auch kostenpflichtige Systeme, wie der SQL Server von Microsoft. Ausserdem muss man mit SQL nicht unbedingt auf eine SQL Datenbank zurückgreifen, man kann auch Abfragen an Access Datenbanken senden.

Um eine Verbindung mit einer Access Datenbank realisieren zu können, kann man wie folgt vorgehen.
  • Zuerst öffnet man eine neue Programmierumgebung und legt ein Standard .exe Projekt an.
  • Man wählt den Menübefehl Projekte >> Komponente und fügt das Steuerelement
    in die Werkzeugsammlung ein, indem man den Hacken aktiviert und mit OK bestätigt.
  • Nun kann man das ADO Steuerelement auf dem Formular anordnen und ihm einen Namen mit dem Präfix „ado“ vergeben.
  • Nun wählt man das ADO Steuerelement an und klickt auf die Eigenschaft „Benutzerdefiniert“ (Schaltfläche [...]).
  • Als Verbindungsquelle wählt man nun die dritte Option „Verbindungszeichenfolge“ aus und klickt auf „Erstellen...“
  • Nun wählt man den Eintrag „Microsoft Jet 4.0 OLE DB Provider“ aus und wechselt auf die nächste Registerkarte „Connection“
  • Um die Datenbank auszuwählen klickt man nun die Schaltfläche [...] an und wählt die entsprechende Datenbank aus. Am Schluss kann man auf OK klicken, oder die Datenbankverbindung mit dem entsprechenden Button testen.
  • Nun kann man die Eigenschaft „Record Source“ anwählen und auf die Schaltfläche [...] klicken.
  • Man hat nun die Auswahl zwischen 4 verschiedenen Zugriffsmodi. Falls man Modi 8 angewählt hat, kann man eine SQL Abfrage eingeben und alle relevanten Datensätze aus der Datenbank holen.
  • Um nun Daten aus der Datenbank anzeigen zu können, muss man nun ein Textfeld (oder ein ähnliches Steuerelement) auf dem Formular anordnen.
  • Mit der Eigenschaft „Data Source“ kann man nun das ADO Steuerelement anwählen, mit der Eigenschaft „Data Field“ kann man das Steuerelement an eine Spalte binden und die Datensätze anzeigen lassen. Richtig Sinn macht die Datenbankverbindung erst, wenn man mehrere Steuerelemente an Spalten bindet.


no_comment
Professonial
Beitrag vom:
30-10-2004, 13:52:57

stimmt!

-----------------------------------------------------
Es gibt nur 3 natürliche Feinde des Programmierers: Tageslicht, frische Luft und das unerträgliche Gebrüll der Vögel -- http://pc-intern.com http://straightvisions.com


paedubucher
Professonial
Beitrag vom:
27-10-2004, 18:32:09

hm

Der Artikel besteht aus ca 30 Seiten. Ist es da nicht ungerecht, wenn ich dafür nur so viele Punkte bekomme, wie andere für ihre ein-zweiseitige Artikel?

-----------------------------------------------------


paedubucher
Professonial
Beitrag vom:
25-02-2004, 22:41:12

Zu dem Code

Der Code sollte zu 99% fehlerfrei kompilierbar sein, wenn man alle steuerelemente richtig anordnet ond ihnen die passenden Namen gibt. Es handelt sich jeweils um kleine, grundlegende Codeschnipsel, da wirst du kaum Fehler finden.
Eine Version, die Klassen anspricht wäre zuweilen auch fertig - alle Rechtschreibefehler behoben!

-----------------------------------------------------


picard
Professonial
Beitrag vom:
25-02-2004, 21:31:11

Mögliche Fehler übersehen...

Dieser Artikel enthält an die 1000 Zeilen Code! Es liegt also im Bereich des möglichen, dass ich vielleicht einige Fehler übersehen habe. Wer sie findet hat gewonnen und möge es mir bitte mailen ;-)

-----------------------------------------------------
"...denn wir arbeiten nicht nur um uns selbst zu verbessern, sondern auch den Rest der Menschheit!"


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04510
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06247
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1158
Comments: 0