Gambas: Ereignisse
Zurück zu Gambas
Ereignisse der Steuerelemente
BearbeitenJedes Steuerelement hat verschiedene Ereignisse, die mit ihm verknüpft sind. Das häufigste Ereignis und meistens auch die Voreinstellung ist das Click Ereignis. Es wird benutzt, wenn etwas passieren soll, wenn man das Steuerelement einmal anklickt. Relativ häufig wird auch das Enter oder das Keypressereignis benutzt. Viele andere Ereignisse dagegen wird man eher selten nutzen. Was der genaue Unterschied ist zwischen den Ereignissen und den Methoden eines Steuerelementes, das ist wohl nicht so ganz klar definiert.
Typisches Beispiel mit einem Befehlsknopf auf der Form:
PUBLIC SUB Button1_Click() Message.Info("Hallo Welt") END
Das Ereignis ist der einfache Click. Die ausgelöste Folge ist die Ausgabe einer Meldung. (Ein 'Click' mit der Maus besteht aus dem Herunterdrücken UND Loslassen der Maustaste, erst mit dem Loslassen ist das Ereignis komplett, wünscht man eine Reaktion schon beim Herunterdrücken, so wähle man das Ereignis 'MouseDown'. Ein 'Click' mit der Tastatur wird ausgelöst, wenn der Knopf den Fokus hat und die Leertaste gedrückt und losgelassen wird.)
Ein weiteres 'Click'-Ereignis mit der Tastatur ist der Zugriff auf Befehlsknöpfe mit einer Tastenkombination ('Alt' und ein Zeichen des Knopfbezeichners. Dazu im Eigenschaftenfenster vor den Buchstaben, welcher mit der 'Alt'-Taste zum Auslösen des 'Click'-Ereignisses dienen soll, ein '&' stellen. Daraufhin wird bei laufendem Programm dieser Buchstabe unterstrichen. Zur Auslösung des Ereignisses muß der entsprechende Knopf nicht den Fokus haben.
Die weitere Bedienung des Befehlsknopfes mit der Tastatur:
PUBLIC SUB Button1_KeyPress() IF key.Code = key.Space OR key.Code = key.Return OR key.code=key.Enter THEN Message.Info("Hallo Welt") ENDIF END
Die Meldung wird ausgegeben, wenn der Befehlsknopf den Fokus hat, und eine der Tasten 'Leerzeichen', 'Return' oder 'Enter' gedrückt wurde ('Return' ist die Taste beim alphanumerischen Block, 'Enter' befindet sich beim Ziffernblock der Tastatur).
Wenn bei dem Knopf gleichzeitig das 'Click'-Ereignis abgefragt wird, muß das Code-Fragment 'key.Code = key.Space OR ' entfallen, da sonst 2 Subroutinen aufgerufen werden.
Alle Ereignismöglichkeiten , die mit einem Steuerelement ausgelöst werden können, finden Sie heraus, wenn Sie mit der rechten Maustaste auf das Steuerelement klicken und die Zeile Ereignis wählen.
Beim Steuerelement Button ( Befehlsknopf) finden sich beispielsweise folgende programmierbaren Ereignisse:
Click DblClick Drag DragMove Drop Enter GotFocus KeyPress KeyRelease Leave LostFocus Menu MouseDown MouseMove MouseUp MouseWheel
Probieren Sie einmal folgendes Ereignis aus:
PUBLIC SUB Button1_Enter() Message.Info("Funktioniert schon wenn die Maus auf den Button kommt") END
Oder folgende Variante:
PUBLIC SUB Button1_Leave() Message.Info("Funktioniert erst wenn die Maus den Button verläßt") END
Wenn man die Ereignisse kombiniert, kommen sich die Ereignisse manchmal in die Quere:
Probieren Sie zb folgendes Programm:
PUBLIC SUB Button1_Leave() ME.Text = "Funktioniert erst wenn die Maus den Button verlaesst." END PUBLIC SUB Button1_Click() Message.Info("Funktioniert schon wenn geklickt wird") END
Wenn man hier den Befehlsknopf anklickt und verläßt ihn nicht, wird trotzdem schon die Überschrift der Form geändert.
Ereignisse programmieren mit EVENT, STOP EVENT, RAISE
BearbeitenEreignisse selbst programmieren macht nur selten Sinn. Man kann beispielsweise die Tasteneingabe einer Textbox überprüfen, wenn man verhindern will, daß etwas anderes als Zahlen eingegeben wird. Es handelt sich hier um eine Art Fehlermanagement.
Beispiel: Sie brauchen eine Textbox auf Ihrer Form.
'Meine Textbox verarbeitet nur Ziffern. PUBLIC SUB TextBox1_KeyPress() IF Instr("0123456789", Key.Text) = 0 THEN STOP EVENT ENDIF END SUB
Wenn Sie etwas anderes eingaben als Ziffern, verweigert die Textbox die Annahme. Ziffern hingegen werden akzeptiert und in der Textbox dargestellt.
Siehe auch Gambas:_Textbearbeitung#Texteingabe
Beim folgenden Beispiel wird ein Ereignis nach dem 4.Mal Klicken auf die Taste ausgelöst.
Sie brauchen eine Form mit einem Befehlsbutton darauf. Außerdem brauchen Sie eine neue Klasse Class1. Diese erhalten Sie, wenn Sie im Projektmenü auf die Zeile Klasse mit der rechten Maustaste klicken und Neue Klasse wählen. Den vorgeschlagenen Namen Class1 sollten sie einfachheitshalber beibehalten:
Folgender Code für die Form wurde verwendet:
PUBLIC SUB Form_Open() MyClass=NEW Class1 AS "Beobachte" END PRIVATE MyClass AS Class1 PUBLIC SUB Button1_Click() MyClass.testen () END PUBLIC SUB Beobachte_ereignis(Data AS String) Message.Info (Data) END
Folgender Code für die Klasse wurde verwendet:
PRIVATE zaehler AS Integer EVENT ereignis (Data AS String) PUBLIC SUB testen() zaehler=zaehler + 1 IF zaehler>3 THEN RAISE ereignis("Taste > 3 mal gedrückt") zaehler=0 END IF END