Gambas: Ereignisse

Aus Wikibooks
Wechseln zu: Navigation, Suche


Zurück zu Gambas


Ereignisse der Steuerelemente[Bearbeiten]

Jedes 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[Bearbeiten]

Ereignisse 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