Gambas: Observer
Einen Observer in Gambas einsetzen
[Bearbeiten]Den Begriff Observer kann man mit Überwacher (observieren = beobachten, überwachen). Er wird eingesetzt, um Ereignisse abzufangen, bevor sie den hinterlegten Vorgang ausführen.
Wenn du über die Tastatur Zeichen in die Textbox eines Formulars eingibst, werden diese jeweils unmittelbar nach dem Drücken der Taste angezeigt.
Angenommen du möchtest verhindern, dass in der Textbox das Zeichen 'x' über die Tastatur eingegeben wird, dann kannst du das Ereignis, das beim Drücken einer Taste im Objekt Textbox ausgelöst wird (Key_Press), abfangen und die Ausführung des nachfolgenden Vorgangs verhindern.
Mit dem Event TextBox1.Key_Press
kannst du wohl einen Befehl nach Eintritt des Ereignisses ausführen, aber die anschließende Ausführung des Vorgangs nicht stoppen.
Dazu ein Programmbeispiel:
Public Sub TextBox1_KeyPress()
Message("Du hast eine Taste gedrückt.")
End
Wenn du in diesem Programmbeispiel zusätzlich die Zeile Stop Event
einfügst, so führt dies bei der Ausführung zu einer Fehlermeldung.
Mit folgendem Programmbeispiel erreichst du das Abfangen des Events. Es basiert auf einem Formular mit dem Namen FMain und einer Textbox mit der Bezeichnung TextBox1.
Private Obs1 As Observer
Public Sub Form_Open()
Obs1 = New Observer(TextBox1) As "Obs1"
End
Public Sub Obs1_KeyPress()
If Key.Code = Key["x"] Then
Message.Info("Du hast die 'x'-Taste gedrückt. Das 'x' wird nicht in die 'TextBox1' übernommen.")
Stop Event
EndIf
End
In der ersten Zeile wird der Observer Obs1 als Objekt mit dem Namen Obs1 deklariert.
In der Prozedur Sub Form_Open() wird der Observer dem Objekt TextBox1 zugewiesen.
Es folg die Prozedur für den Observer-Event Sub Obs1_KeyPress(), also dem Ereignis, das der Observer abfangen soll.
Solange eine andere Taste als das kleine 'x' gedrückt wird, erscheint das jeweilige Zeichen in der Textbox1. Wird versucht das kleine 'x' einzugeben, so erscheint ein Dialog mit dem Hinweis, dass dieses Zeichen nicht übernommen wird.
Der darauf folgende Befehl Stop Event
bricht den Vorgang ab