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