Eingabe über Tastatur und Bildschirm

Inputbox | Textbox | Options-Button | Kontrollkästchen | Scrollbars | Maus | Tastatur

Was gibt es bei einem Rechner einzugeben? Tropfen oder Tabletten nimmt er nicht. Bleiben Tastatur und Maus. Natürlich gibt man die nicht ein, sondern nutzt sie nur, um Text oder Zahlen einzugeben, eine Auswahl zu trefffen oder andere Bedienaktivitäten (so etwas wie "Start", "Stop" oder "Hände hoch") los zu werden.


Eingabe mit einer InputBox

Inputbox
Eine Inputbox wird mit dem Ausdruck (Minimum):

Eingabe = InputBox ("Fragetext")

erzeugt.

"Eingabe" ist eine Variable, der der eingegebene Text zugewiesen wird. Irgendwo steht also eine Zeile wie "Dim Eingabe As String".
Wenn eine Zahl eingegeben werden soll, muß die aus "Eingabe" eigens erzeugt werden. Das Zauberwort dazu heißt "Typumwandlung", die leider auch scheitern kann, wenn die eingegebene Zahl keine Zahl ist. Was man dagegen tun kann, steht im Programmbeispiel .

Das war nur die halbe Wahrheit!
Wer einen "richtigen" Programmierer, einen von der Sorte, die es nicht unter C++ tut, straffrei umbringen will, der zeige ihm dies:

x = InputBox("wieviel")
Label1.Caption = Sin(x)

Das klappt nämlich, egal ob x ein String ist oder eine Zahl. Visual Basic nimmt die erforderlichen Anpassungen selber vor. Aber: Toleranz sollte man - nie - mißbrauchen!

zum Anfang

TextBox für Text- oder Zahleingabe

Syntax: Eingabe = UserForm1.Text1.Text

Eingabe ist eine Variable, der der eingegebene Text zugewiesen wird, es ist, wie oben bei der Inputbox, an sich ein String, der, wenn er eine Zahl bedeuten soll, mit der Val-Funktion oder einer Umwandlungsfunktion wie CInt, CSng oder CDbl in den gewünschten Zahlentyp umgewandelt werden sollte. Das einfachste Anwendungsbeispiel ist der "Kohlerechner", der die schlampige Art des Umgangs mit solchen Zahleingaben demonstriert.

Anmerkung: Dies ist ein HTML-Textfeld!

zum Anfang

Optionsfeld (OptionButton)

Hier geht es um eine Auswahl.

Optionsfeld Syntax: If OptionX.Value [= True] Then ... bzw. If Option(n).Value Then ...

Die Optionsfelder können einzeln benannt werden, dann muß auch ihre Auswertung in Einzelabfragen erfolgen, nur eines kann innerhalb eines Formulars bzw. eines Frames ausgewählt (.value = True) sein. Einfacher abzufragen ist ein Steuerelementefeld, hier gibt es bezüglich der Auswertung zwei Möglichkeiten.

Die erste, bequemere und eigentlich "richtige" wertet aus, wenn einer der Option-Buttons angeklickt wird. Wenn diese Option1(i) heißen, dann sieht die Auswertung so aus:

Dim Auswahl As Integer
...
Private Sub Option1_Click(Index As Integer)
Auswahl=Index
End Sub
...

Dabei ist eines zu beachten. Wenn ein Formular mit einem Optionsfeld geöffnet wird, sollte eine Option vorgewählt sein, der zugehörige Auswahl-Wert muß in der Form_Load-Prozedur einen passenden Anfangswert zugewiesen bekommen.

Eine zweite, aufwendigere Möglichkeit ist, die Bedienung der Option-Buttons zunächst nicht auszuwerten und erst etwa beim Verlassen eines Formulars den dann vorhandenen Stand zu übernehmen. So etwas würde man dann tun, wenn beim Verlassen etwa auch andere Komponenten ausgewertet werden müssen und wenn die Auswahl erst auf anderen Formularen Bedeutung hat.

Dim i As Integer
...
for i = 0 to 10
If Option1(i).Value then Auswahl = i
next
...

In beiden Fällen könnte die Auswertung der Variablen "Auswahl"  später beispielsweise mit
 

Select Case Auswahl
Case 0
...
Case 1
...
...
End Select

erfolgen.

zum Anfang

Kontrollkästchen (CheckBox)

Auswahl, Mehrfachwahl oder Wahlverweigerung sind erlaubt

Checkbox Syntax: If CheckBoxX.Value [= True] Then ...

Es können mehrere aktiv (True) sein.
Die Auswertung kann, wie oben bei den Option-Buttons entweder direkt beim Klicken der CheckBoxen erfolgen oder alternativ beim Übernehmen aller gewählten Daten vor dem Beginn einer Rechnung oder dem Verlassen eines Formulars. Die Abfrage nach gewählten Kontrollkästchen erfolgt je nach Benennung einzeln, oder, wenn es ein Feld ist, in einer Schleifenstruktur.

zum Anfang

ScrollBars für Eingabe von Zahlenwerten

Diese guten Stücke gibt es horizontal (Bild) und vertikal, demgemäß heißen sie HScrollBar oder VScrollBar. Ein Anwendungsbeispiel ist unter "Datenauswertung" zu sehen.

Scrollbalken

Sie eignen sich für die Eingabe von Zahlwerten (warum wohl nicht von Texten?) und sind in der Verwendung völlig unkompliziert.
Ihren Startwert legt man mit der Eigenschaft .Min, ihren Endwert mit der Eigenschaft .Max fest. Das kann im Eigenschaftenfenster oder zur Laufzeit durch Zuweisung geschehen. Zulässig sind für beide positive oder negative Integerzahlen. Oben im Bild sind diese Einstellungen so verwendet worden, wie sie beim Einfügen der ScrollBars gelten.
Die Eigenschaft .Value, die man lesen oder auch setzen kann, kennzeichnet die Stellung des Schiebers. Was man beachten muß: ScrollBars können von sich aus nur Integerzahlen zurückmelden. Wenn man etwa Werte zwischen 0 und 1 in Hundertstel-Schritten erzeugen will, setzt man Min auf 0, Max auf 100 und dividiert für die Verwendung den erhaltenen Value durch Hundert. Eigentlich logisch, oder?
Wenn man mit seinem frisch installierten Scrollbalken spielt, merkt man gelegentlich, daß er sich anders verhält, als von Windows gewöhnt. Die üblichen "Slider" lassen sich ja mit Klick auf die Dreiecksysmbole oder in den Sliderbereich um gewisse Schritte verstellen. Da man diese Schrittgrößen einstellen kann, können sie im Einzelfall sehr ungeeignete Werte enthalten und ungewohnt reagieren. Versuchen Sie, die Sache mit den Eigenschaften LargeChange und SmallChange im Eigenschaftenfenster in Ordnung zu bringen.
Abschließend, damit die Auswertung klar wird, der Programmcode zum abgebildeten Fenster, in dem die Werte der drei ScrollBars (als Steuerelementefeld organisiert) den Labels zugewiesen werden, damit man die Werte erkennen kann.

Private Sub HScroll1_Change(Index As Integer)
Label1(Index).Caption = HScroll1(Index).Value
End Sub

Klappt, aber es gibt einen kleinen Schönheitsfehler: Die Anzeigen werden erst dann aktualisiert, wenn die Verschiebung des Schiebers beendet ist. Wie es besser geht? Eine zusätzliche Prozedur, die das Scroll-Ereignis auswertet, hilft. Also dies:

Private Sub HScroll1_Scroll(Index As Integer)
Label1(Index).Caption = HScroll1(Index).Value
End Sub
zum Anfang

Mauseingaben

Die Maus ist bei den obigen Eingaben schon verwendet worden, ohne daß wir es bemerkt haben. Bei den Ereignissen Click und DblClick, die am häufigsten genutzt werden, ist natürlich zunächst immer die Maus gemeint.
Die kann aber noch viel mehr, wenn man sich speziell um sie kümmert. Kümmern heißt "Mausereignisse auswerten". Die gibt es auch zu fast allen Steuerelementen und sie heißen MouseDown, MouseMove, MouseUp. Auch ohne längeres Nachdenken findet man heraus, es geht um spezifizierte Mausklicks, die Bewegung der Maus, das Loslassen der Maustasten. Die drei möglichen Aufrufe etwa auf dem Formular selbst lauten:

Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

Button meldet die gedrückte Taste: 1 linke, 2 rechte, 4 mittlere Maustaste
Shift meldet, ob und welche Taste zusätzlich gedrückt wurde:

WertTaste(n)
1Shift
2Strg
3Shift und Strg
4Alt
5Alt und Shift
6Alt und Strg
7Alt, Shift und Strg

X und Y sind die Koordinaten der Mausspitze auf dem Steuerelement in Twips (Standard) oder der mit Scale eingestellten Maßeinheit.

Die eigentliche Eingabe muß in der Prozedur programmiert werden, die durch das Mausereignis aufgerufen wird.

Wichtig: Die Mausereignisse gehören immer zu dem Steuerelement, das "den Fokus hat". Beim Klick erhält ein Steuerelement gewöhnlich den Fokus, deshalb kann mit MouseDown nichts Schlimmes passieren. Bei MouseMove dagegen kann es leicht passieren, daß Maus und Mauseführer unterschiedlicher Meinung darüber sind, wo sie sich gerade befinden.

zum Anfang

Tastatureingaben

Last, but not least, wie wir auf gut Neudeutsch sagen, die Tastatur.
Sie ist schon vielfach verwandt worden, ohne genannt zu werden, aber sie kann mehr.

Es gibt es zu den meisten Steuerelementen spezielle Tastaturereignisse, KeyDown, KeyPress, KeyUp, die man auswerten kann. Die zugehörigen Sub's im Falle des Formulars:

Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Sub Form_KeyPress(KeyAscii As Integer)
Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)

KeyCode ist der Tastencode, eine Ganzzahl. Der KeyCode entspricht bei Großbuchstaben, Zahlen und den Steuerzeichen dem ASCII-Code. Wenn man ihn braucht, einfach mit einem Formular und einem Label dies eingeben:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Label1.Caption = KeyCode
End Sub

und so ermitteln.
Shift meldet die Zusatztaste: 1 Shift, 2 Strg, 4 Alt
KeyAscii meldet, wie der Name schon sagt, den ANSI-Code der gedrückten Taste bzw. Tastenkombination, also etwa 97 für "a". -> ANSI-Code (8 Bit) ist der erweiterte ASCII-Code (7 bit)

Wichtig: Wie bei der Maus gehören die Ereignisse, diesmal der Tastatur, immer zu dem Steuerelement, das "den Fokus hat". Den Fokus hat das Formular so gut wie nie. Wenn man eine Tastaturabfrage programmieren will, sollte man unbedingt zuvor den Fokus per Befehl geeignet festlegen. Falls man ein Ereignis per Tastatur erfassen will, ohne sich auf den Zeitpunkt der Tasteneingabe festzulegen, etwa Programmabbruch per ESC-Taste, muß das Tastaturereignis für alle Steuerelemente programmiert werden, die ggf. den Fokus haben könnten.

zum Anfang

© R. Hirte * 1998