| 5 | |||||||||||||||

Häufig ist es nützlich, eine Reihe gleicher Steuerelemente-Arten zu erstellen, die über den Namen des Steuerelementes und einer Indexzahl angesprochen werden können. Dadurch ist es möglich:
daß sich eine Anzahl gleicher Steuerelemente den Programmcode teilen. Zum Beispiel: man hat eine Reihe Textfelder, und möchte jene hervorheben, auf der sich gerade die Maus befindet. Dies kann dadurch erreicht werden, indem die Textfelder als ein Steuerelemente-Datenfeld (Array) erstellt werden, und im Programmcode der MouseMove-Methode eingetragen wird, daß die aktuelle Textbox hervorgehoben wird (und die zuvor hervorgehobene wieder zurückgesetzt wird). Mit einem Steuerelemente-Datenfeld reagieren alle Objekte, die darin enthalten sind, auf den Programmcode, es muß also nur einmal ein Code geschrieben werden, und nicht für jedes der beinhalteten Steuerelemente separat.
daß eine Reihe Steuerelemente etwas tun, bei dem die Funktion (oder der Programmcode) auf die jeweilige Position im Steuerelemente-Datenfeld verweist. Zum Beispiel, im Rechner-Programm wurden die Schaltflächen für die Zahlen 0 bis 9 als Datenfeld angelegt. Sie benutzen den gleichen Code, und der Index bezog sich auf die jeweilige Zahl "0" bis "9", die auf der Schaltfläche stand.
Dies läßt sich einfach bewerkstelligen. Erstellen Sie das erste Steuerelement in der üblichen Art und Weise aus der Werkzeugsammlung. Angenommen, es wäre ein Textfeld mit Namen Text1. Wählen Sie jetzt Text1 (durch Clicken) an und wählen Sie Kopieren aus dem Bearbeiten-Menü. Wählen Sie dann Einfügen aus dem gleichen Menü. VB wird eine Dialogbox zeigen, in welcher es feststellt, daß es schon ein Steuerelement mit diesem Namen gibt, und fragt, ob man ein Steuerelemente-Datenfeld erstellen möchte; clicken Sie auf JA.

Ein neues Textfeld wird am linken oberen Rand der Form erscheinen, es kann von dort an die gewünschte Position gezogen werden. Wenn Sie das Eigenschaften-Fenster anschauen, werden Sie feststellen, daß es dort zwei Textfelder gibt, mit den Namen Text1(0) und Text1(1); das erste Element eines Steuerelemente-Datenfeldes erhält die Indexzahl 0. Erstellen Sie acht weitere Textfelde auf diese Art, und beachten Sie ihre unterschiedlichen Indizes.
Das Wichtigste, was bei einem Verweis auf ein Steuerelemente-Datenfeld zu beachten ist, ist der Index. Um sich an solche Datenfelder zu gewöhnen, folgt ein kleines Beispiel für die oben erstellten Textfelder.
Setzen Sie die Forecolor-Eigenschaft aller Textfelder auf gelb. Markieren Sie dafür alle zehn Textfelder (einen Bearbeitungsrahmen um alle ziehen), und setzen Sie die Farbe im Eigenschaften-Fenster.

Schreiben Sie diesen Code hinter die Click-Methode der oberen Schaltfläche (Ausführen):
Sub cmdAusführen_Click ()
Dim i As Integer
For i = 0 To 9
text1(i).BackColor = QBColor(i)
text1(i).Text = i
Next i
End Sub
Starten Sie das Programm und vergewissern Sie sich, ob Sie verstanden haben, was das Programm macht.
Behalten Sie die Oberfläche bei, aber löschen Sie die Ausführen-Schaltfläche.
Fügen Sie ein Panel unterhalb den Textfeldern ein, das Symbol in der Werkzeugsammlung für dieses Steuerelement ist
. (Sollte es nicht aufscheinen, muß über das Menü Extras, Eintrag Zusatzsteuerelemente Threed32.ocx hinzugeladen werden. Setzen Sie die Backcolor-Eigenschaft aller Textfelder auf Hellgrau. Programmieren sie die MouseMove-Methode von Text1() so, daß:
a) Wenn sich die Maus über einem Textfeld befindet, die Hintergrundfarbe dieses Textfeldes rot wird, und bei allen anderen hellgrau.
b) Das Panel (welches als Statuszeile verwendet wird) soll in der Caption-Eigenschaft anzeigen, auf welchem Textfeld sich die Maus gerade befindet, z.B. "Die Maus befindet sich über Textfeld Nr. 3."
Der Prozedurkopf der MouseMove-Methode beinhaltet eine Parameterliste, bei der der erste Parameter der Index ist. Dies bedeutet daß VB den Wert des aktuellen Index ausliest (in der Variable Index) und zurückgibt, damit man diesen Wert für andere Vorgänge nutzen kann.
Ein direkter Weg, um Aufgabe Nr. 1 zu lösen, wäre:
Sub Text1_MouseMove (Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim i As Integer ' deklariert eine Variable, die als Zählwerk eingesetzt wird
For i = 0 To 9 ' weil es zehn Textfelder gibt
If i = Index Then ' diese ist die hervorzuhebende
Text1(i).BackColor = QBColor(12) ' Rot
Else
Text1(i).BackColor = QBColor(7) ' Hellgrau
End If
Next i
SSPanel1.Caption = "Die Maus befindet sich gerade über Textfeld Nr. " & Index & "."
End Sub
Wenn man einen Text in den Textfeldern stehen hat, so fällt dabei auf, daß dieser Text flackert. Das ist deshalb der Fall, weil der Code jedesmal ausgeführt wird, wenn die Maus bewegt wird, und nicht nur beim Erreichen eines neuen Textfeldes.
Modifizieren Sie Ihr Programm, so daß wenn der Cursor zu einem neuen Textfeld kommt, diese hervorgehoben wird, und nur die zuvor hervorgehobene zurückgesetzt wird. In etwa so:
Sub Text1_MouseMove (Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
' Beachten Sie daß TbMax (maximales Textfel-Index) eine globale Konstante ist
' die in Modul1.bas mit dem Wert 9 deklariert wurde.
' Zuvor ist eine globale Variable, die in Modul1.bas deklariert worden ist,
' und in Form_Load mit TbMax+1 (d.h. außerhalb des Umfangs) initialisiert worden ist.
If Index <> Zuvor Then ' Es hat eine Änderung gegeben, also Hervorheben
Text1(Index).BackColor = QBColor(12) ' Rot
If Zuvor <= TbMax Then Text1(Zuvor).BackColor = QBColor(12) ' Hellgrau
Zuvor = Index ' aktuellen Index in Zuvor speichern
SSPanel1.Caption = "Die Maus befindet sich über Textfeld Nr." & Index & "."
End If
End Sub
Variable mit globaler Reichweite müssen in einem Modul deklariert werden, das allen Programmteilen zugänglich ist. Solch ein Modul wird erstellt, indem man im Einfügen-Menü den Eintrag Modul wählt.
Die Syntax lautet:
Public Zuvor As Integer Public Const TbMax = 9
Übung 4 (Menü- und Listen-Bearbeitung)
Hauptseite
Übung 6 (Vertikale und Horizontale Bildlaufleisten)