Freigeben über


Richtlinien für Methoden- und Ereigniscode

Sie können nicht nur den Code für die Methoden und Ereignisse eines Objekts schreiben, sondern auch den Methodensatz in den Unterklassen der Visual FoxPro-Basisklassen erweitern. Es folgen die Regeln, die Sie beim Schreiben des Codes für Ereignisse und Methoden beachten müssen:

  • Der Ereignissatz für die Visual FoxPro-Basisklassen ist fest und kann nicht erweitert werden.
  • Jede Klasse reagiert auf einen Satz fester Standardereignisse. Der kleinste Ereignissatz umfasst die Ereignisse Init, Destroy und Error.
  • Wenn Sie in einer Klassendefinition eine Methode mit dem Namen eines Ereignisses erstellen, auf das die Klasse reagiert, dann wird der Code in der Methode ausgeführt, sobald ein solches Ereignis auftritt.
  • Sie können Methoden zu Ihren Klassen hinzufügen, indem Sie innerhalb der Klassendefinition eine Prozedur oder Funktion erstellen.
  • Sie können Access- und Assign-Methoden für Ihre Klassen erstellen, indem Sie eine Prozedur oder eine Funktion erstellen, die denselben Namen wie eine Klasseneigenschaft hat, und anschließend _ACCESS bzw. _ASSIGN an den Namen der Prozedur bzw. der Funktion anhängen.

Aufrufen des Ereigniscodes über die Klassenhierarchie

Wenn Sie eine Klasse erstellen, dann erbt die Klasse automatisch alle Eigenschaften, Methoden und Ereignisse der übergeordneten Klasse. Befindet sich in der übergeordneten Klasse Code für ein Ereignis, dann wird dieser Code in Bezug auf ein auf der Unterklasse basierendes Objekt ausgeführt, sobald das Ereignis eintritt. Sie können den Code der übergeordneten Klasse jedoch überschreiben, indem Sie in der Unterklasse Code für das Ereignis angeben.

Möchten Sie, dass der Ereigniscode einer übergeordneten Klasse explizit aufgerufen wird, auch wenn die Unterklasse Code für das gleiche Ereignis enthält, dann sollten Sie die DODEFAULT( )-Funktion verwenden.

Sie könnten z. B. eine Klasse mit dem Namen cmdBottom geschrieben haben, die auf der Basisklasse für Befehlsschaltflächen basiert und für das Click-Ereignis mit folgendem Code ausgestattet wurde:

GO BOTTOM
THISFORM.Refresh

Wenn Sie z. B. ein auf dieser Klasse basierendes Objekt zu dem Formular cmdBottom1 hinzufügen, können Sie bestimmen, dass für den Benutzer eine Meldung ausgegeben werden soll, um ihm anzuzeigen, dass sich der Datensatzzeiger am Tabellenende befindet. Dazu könnten Sie folgenden Code zum Click-Ereignis des Objekts hinzufügen:

WAIT WINDOW "At the Bottom of the Table" TIMEOUT 1

Wenn Sie das Formular ausführen, wird die Meldung zwar angezeigt, der Datensatzzeiger aber nicht verschoben, weil der Code für das Click-Ereignis der übergeordneten Klasse nie ausgeführt wird. Möchten Sie, dass der Code im Click-Ereignis der übergeordneten Klasse ebenfalls zur Ausführung kommt, dann sollten Sie folgende Zeilen in die Click-Ereignisprozedur des Objekts einfügen:

DODEFAULT( )
WAIT WINDOW "At the Bottom of the Table" TIMEOUT 1

Anmerkung   Mit Hilfe der ACLASS( )-Funktion können Sie alle Klassen in der Klassenhierarchie eines Objekts ermitteln.

Ausführen des Basisklassencodes verhindern

In einigen Fällen möchten Sie möglicherweise beim Auftreten eines Ereignisses oder beim Aufrufen einer Methode das standardmäßige Verhalten der Basisklasse verhindern. Sie erreichen dies, indem Sie das Schlüsselwort NODEFAULT in der zu schreibenden Methode unterbringen. Das folgende Programm verwendet beispielsweise das Schlüsselwort NODEFAULT im KeyPress-Ereignis eines Textfeldes, um zu verhindern, dass die eingegebenen Zeichen im Textfeld angezeigt werden:

frmKeyExample = CREATEOBJECT("test")
frmKeyExample.Show
READ EVENTS
DEFINE CLASS test AS FORM
  ADD OBJECT text1 AS TEXTBOX
  PROCEDURE text1.KeyPress
   PARAMETERS nKeyCode, nShiftAltCtrl
   NODEFAULT
   IF BETWEEN(nKeyCode, 65, 122) && between 'A' and 'z'
    This.Value = ALLTRIM(This.Value) + "*"
    ACTIVATE SCREEN      && send output to main Visual FoxPro window
    ?? CHR(nKeyCode)
   ENDIF
  ENDPROC
  PROCEDURE Destroy
   CLEAR EVENTS
  ENDPROC
ENDDEFINE

Siehe auch

Programmgesteuertes Schreiben von Klassendefinitionen | Hinzufügen von Objekten zu einer Containerklasse | Erstellen eines Satzes von Tabellennavigationsschaltflächen | Init | Destroy | Error | Access- und Assign-Methoden | Objektorientierte Programmierung