Freigeben über


Ereignisse in Visual FoxPro

Ereigniscode wird als Reaktion auf diverse Benutzeraktionen automatisch vom System ausgelöst. Beispielsweise wird Programmcode, der für ein Click-Ereignis geschrieben wurde, vom System automatisch ausgeführt, wenn ein Benutzer auf ein Steuerelement klickt. Ereigniscode kann ebenfalls durch Systemereignisse ausgelöst werden, wie im Falle des Timer-Ereignisses in einem Zeitgeber-Steuerelement.

Die Kernereignisse

Die folgende Tabelle enthält eine Liste der Visual FoxPro-Kernereignisse, die für die meisten Steuerelemente gelten.

Gruppe von Kernereignissen

Ereignis Aktion bei Auslösen des Ereignisses
Init Ein Objekt wird erstellt.
Destroy Ein Objekt wird aus dem Arbeitsspeicher gelöscht.
Click Der Benutzer klickt mit der linken Maustaste auf das Objekt.
DblClick Der Benutzer doppelklickt mit der linken Maustaste auf das Objekt.
RightClick Der Benutzer klickt mit der rechten Maustaste auf das Objekt.
GotFocus Das Objekt erhält den Fokus, und zwar durch eine Benutzeraktion wie Drücken von TAB oder Klicken oder indem der Fokus im Code mit Hilfe der SetFocus-Methode geändert wird.
LostFocus Das Objekt verliert den Fokus, und zwar durch eine Benutzeraktion wie Aktivieren eines anderen Objekts durch Drücken von TAB oder Klicken oder indem der Fokus im Code mit Hilfe der SetFocus-Methode geändert wird.
KeyPress Der Benutzer drückt eine Taste und löst sie wieder.
MouseDown Der Benutzer drückt die Maustaste, während sich der Mauszeiger auf dem Objekt befindet.
MouseMove Der Benutzer verschiebt die Maus über einem Objekt.
MouseUp Der Benutzer lässt die Maustaste los, während sich der Mauszeiger auf einem Objekt befindet.

Container und Objektereignisse

Es gibt zwei Grundregeln, die Sie immer beachten sollten, wenn Sie Ereigniscode für Steuerelemente schreiben:

  • Container verarbeiten keine Ereignisse, die ihnen zugeordnete Steuerelemente enthalten.
  • Wurde einem Steuerelement kein Ereigniscode zugeordnet, dann überprüft Visual FoxPro, ob dem in der Klassenhierarchie darüber liegenden Steuerelement zu dem Ereignis Code zugeordnet wurde.

Wenn ein Benutzer mit einem Objekt arbeitet, z. B. indem er mit Hilfe von TAB zu ihm gelangt, darauf klickt oder den Mauszeiger über dem Objekt verschiebt, dann finden Objektereignisse statt. Jedes Objekt empfängt seine Ereignisse unabhängig von den anderen. Wenn sich beispielsweise auf einem Formular eine Befehlsschaltfläche befindet, dann wird, wenn ein Benutzer auf diese Schaltfläche klickt, das Click-Ereignis nicht für das Formular ausgelöst, sondern nur für die Befehlsschaltfläche.

Ist mit der Befehlsschaltfläche kein Code für das Click-Ereignis verbunden, dann geschieht nichts, obwohl der Benutzer auf die Schaltfläche klickt, auch dann nicht, wenn dem entsprechenden Formular Code für das Click-Ereignis zugeordnet wurde.

Diese Regel gilt auch für Datenblatt-Steuerelemente. Das Datenblatt enthält Spalten, die wiederum Kopfzeilen und Steuerelemente enthalten. Wenn Ereignisse auftreten, dann erkennt nur das innerste, in das Ereignis einbezogene Objekt das Ereignis. Die Container auf höherer Ebene bemerken das Ereignis nicht.

Es gibt jedoch eine Ausnahme von dieser Regel. Wenn Sie für eine Optionsfeldgruppe oder eine Befehlsschaltflächen-Gruppe Ereigniscode geschrieben haben, eine einzelne Schaltfläche oder ein einzelnes Feld dieser Gruppe jedoch keinen Code für das Ereignis besitzt, dann wird der Ereigniscode der Gruppe ausgeführt, sobald das Schaltflächenereignis auftritt.

Anmerkung   Wenn eine Ereignisfolge, wie z. B. MouseDown und danach MouseUp, für ein Steuerelement begonnen wird, gehört die gesamte Folge zu dem Steuerelement. Wenn Sie beispielsweise die linke Maustaste auf einer Befehlsschaltfläche drücken und den Mauszeiger von der Befehlsschaltfläche wegziehen, dann treten die MouseMove-Ereignisse der Befehlsschaltfläche fortwährend auf, auch wenn sich der Mauszeiger über dem Formular bewegt. Wenn Sie die linke Maustaste über dem Formular anstatt über der Befehlsschaltfläche freigeben, dann ist das auftretende MouseUp-Ereignis mit der Befehlsschaltfläche und nicht mit dem Formular verbunden.

Klassen und Steuerelementereignisse

Wenn ein Steuerelement auf einem Formular auf einer benutzerdefinierten Klasse beruht (die wiederum auf einer anderen benutzerdefinierten Klasse beruhen könnte), sucht Visual FoxPro im unmittelbaren Steuerelement nach dem Ereigniscode, wenn ein Ereignis aufgetreten ist. Wenn sich in dieser Ereignisprozedur Code befindet, dann wird dieser von Visual FoxPro ausgeführt. Existiert hier kein Ereigniscode, dann durchsucht Visual FoxPro die nächsthöhere Ebene der Klassenhierarchie. Wird an irgendeiner Stelle in der Klassenhierarchie Code gefunden, der sich auf dieses Ereignis bezieht, dann wird dieser Code ausgeführt. Code, der sich auf noch höherer Stufe der Hierarchie befindet, wird nicht ausgeführt.

Sie können jedoch Code in eine Ereignisprozedur einfügen und den Code explizit in Klassen ausführen, auf denen das Steuerelement beruht, indem Sie die Funktion DODEFAULT( ) verwenden.

Siehe auch

Grundlegendes zum Ereignismodell | Überprüfen von Ereignisfolgen | Zuweisen von Code zu Ereignissen | SetFocus-Methode