Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Ein allgemeines Merkmal vieler Anwendungen ist eine Reihe von Navigationsschaltflächen, die es den Benutzern ermöglicht, sich in der Tabelle zu bewegen. Dazu gehören gewöhnlich Schaltflächen, über die der Datensatzzeiger zum nächsten oder vorhergehenden bzw. zum ersten oder letzten Datensatz innerhalb der Tabelle bewegt wird.
Entwerfen von Navigationsschaltflächen
Jede dieser Schaltflächen benötigt einige Merkmale und Funktionen, die sie mit den anderen gemeinsam hat, daher ist es sinnvoll, eine Navigationsschaltflächen-Klasse zu erstellen. Die einzelnen Schaltflächen können die hier festgelegte allgemeine Darstellung und die Funktionalität dann einfach erben. Die übergeordnete Klasse ist die Navbutton-Klasse, die weiter unten in diesem Abschnitt definiert wird.
Nachdem die übergeordnete Klasse definiert wurde, werden mit den folgenden Unterklassen die Funktionalität und die Darstellung für jede der vier Navigationsschaltflächen speziell festgelegt: navTop, navPrior, navNext, navBottom.
Zum Schluss wird eine Containerklasse, vcr, erstellt, zu der die einzelnen Navigationsschaltflächen hinzugefügt werden. Der Container wiederum kann zu einem Formular oder zu einer Symbolleiste hinzugefügt werden, um die Tabellennavigation verfügbar zu machen.
Definition der NAVBUTTON-Klasse
Um Navbutton zu erstellen, speichern Sie die folgenden sechs Klassendefinitionen (Navbutton, navTop, navBottom, navPrior, navNext und vcr) in einer Programmdatei wie z. B. Navclass.prg ab.
Definition der generischen Navigationsschaltflächen-Klasse
| Code | Kommentar |
|---|---|
|
Definiert die übergeordnete Klasse der Navigationsschaltflächen. Vergabe von Maßen für die Klasse. Hinzufügen einer benutzerdefinierten Eigenschaft, TableAlias, zur Aufnahme des Aliasnamens der Tabelle, in der navigiert werden soll. |
|
Wurde TableAlias gesetzt, dann wählt diese übergeordnete Klassenprozedur den Alias aus, bevor der aktuelle Navigationscode in den Unterklassen ausgeführt wird. Andernfalls wird angenommen, dass sich der Benutzer in der Tabelle im aktuell eingestellten Arbeitsbereich bewegen möchte. |
|
Unter Verwendung von _SCREEN.ActiveForm.Refresh anstatt THISFORM.Refresh arbeitet die Klasse korrekt, unabhängig davon, ob Sie sie zu einem Formular oder zu einer Symbolleiste hinzufügen. |
|
Ende der Klassendefinition. |
Die speziellen Navigationsschaltflächen basieren alle auf der Navbutton-Klasse. Über den folgenden Code wird die Schaltfläche Anfang für den Navigationsschaltflächen-Satz definiert. Die verbleibenden drei Navigationsschaltflächen werden in der folgenden Tabelle definiert. Die vier Klassendefinitionen ähneln einander, so dass nur die erste Definition ausführlich kommentiert ist.
Definition der Navigationsschaltfläche "Anfang"
| Code | Kommentar |
|---|---|
|
Definiert die Navigationsschaltflächen-Klasse für Anfang und stellt die Caption-Eigenschaft ein. |
|
Dient zum Erstellen des Methodencodes, der ausgeführt werden soll, wenn das Click-Ereignis für das Steuerelement auftritt. |
|
Ruft den Click-Ereigniscode in der übergeordneten Klasse Navbutton auf, so dass der entsprechende Alias gewählt werden kann, wenn die TableAlias-Eigenschaft gesetzt wurde.Fügt den Code hinzu, mit dem der Datensatzzeiger auf den ersten Datensatz in der Tabelle gesetzt wird: GO TOP. Ruft die RefreshForm-Methode der übergeordneten Klasse auf. In diesem Fall muss der Geltungsbereich-Auflösungsoperator (::) nicht verwendet werden, da sich in der Unterklasse keine Methode mit dem gleichen Namen wie in der übergeordneten Klasse befindet. Andererseits haben sowohl die übergeordnete als auch die Unterklasse Methodencode für das Click-Ereignis. |
|
Ende der Click-Prozedur. |
|
Ende der Klassendefinition. |
Die anderen Navigationsschaltflächen haben ähnliche Klassendefinitionen.
Definition der anderen Navigationsschaltflächen-Klassen
| Code | Kommentar |
|---|---|
|
Definiert die Navigationsschaltflächen-Klasse für Nächster Datensatz und stellt die Caption-Eigenschaft ein. |
|
Hiermit wird der Datensatzzeiger auf den nächsten Datensatz in der Tabelle gesetzt. Ende der Klassendefinition. |
|
Definiert die Navigationsschaltflächen-Klasse für Vorheriger Datensatz und stellt die Caption-Eigenschaft ein. |
|
Hiermit wird der Datensatzzeiger auf den vorhergehenden Datensatz in der Tabelle gesetzt. Ende der Klassendefinition. |
|
Definiert die Navigationsschaltflächen-Klasse für Letzter Datensatz und stellt die Caption-Eigenschaft ein. |
|
Hiermit wird der Datensatzzeiger auf den letzten Datensatz in der Tabelle gesetzt. Ende der Klassendefinition. |
Die folgende Klassendefinition enthält alle vier Navigationsschaltflächen, so dass sie als Einheit zu einem Formular hinzugefügt werden können. Die Klasse enthält ebenfalls eine Methode, über die die TableAlias-Eigenschaft für die Schaltflächen festgelegt werden kann.
Definition der Tabellennavigations-Steuerelementklasse
| Code | Kommentar |
|---|---|
|
Beginn der Klassendefinition. Die Height-Eigenschaft wird auf die gleiche Höhe festgelegt wie die der Befehlsschaltflächen, die enthalten sind. |
|
Fügt die Navigationsschaltflächen hinzu. |
|
Diese Methode wird verwendet, um die TableAlias-Eigenschaft für die Schaltflächen zu setzen. TableAlias ist in der übergeordneten Klasse Navbutton definiert.Sie könnten diese Eigenschaft auch über die SetAll-Methode festlegen: IF TYPE ("cTableAlias") = 'C'This.SetAll("TableAlias", "cTableAlias")ENDIFDadurch würde jedoch ein Fehler verursacht werden, wenn ein Objekt zu der Klasse hinzugefügt wird, das keine TableAlias-Eigenschaft hat. |
|
Ende der Klassendefinition. |
Nachdem Sie die Klasse definiert haben, können Sie Unterklassen aus dieser ableiten oder sie zu einem Formular hinzufügen.
Erstellen einer Unterklasse, die auf der neuen Klasse basiert
Sie können auch Unterklassen basierend auf vcr mit zusätzlichen Schaltflächen wie Suchen, Bearbeiten, Speichern und Beenden erstellen. Die Unterklasse vcr2 hat z. B. die Schaltfläche Quit (Beenden).
Definition einer Unterklasse für ein Tabellennavigations-Steuerelement
| Code | Kommentar |
|---|---|
|
Definiert eine Klasse, die auf vcr beruht, und fügt dieser eine Befehlsschaltfläche hinzu. |
|
Wenn der Benutzer auf cmdQuit klickt, gibt dieser Code das Formular frei. |
|
Ende der Klassendefinition. |
Vcr2 verfügt über die gleichen Eigenschaften und die gleiche Funktionalität wie vcr und zusätzlich über eine neue Befehlsschaltfläche. Zudem muss der bestehende Code nicht erneut geschrieben werden.
In der Unterklasse widergespiegelte Änderungen zu VCR
Aufgrund der Vererbung werden Änderungen an der übergeordneten Klasse in allen entsprechenden Unterklassen widergespiegelt. Sie könnten dem Benutzer beispielsweise mitteilen, dass das Ende der Tabelle erreicht wurde. Dabei brauchen Sie lediglich die IF EOF( )-Anweisung in navNext.Click folgendermaßen zu ändern:
IF EOF( )
GO BOTTOM
SET MESSAGE TO "Bottom of the table"
ELSE
SET MESSAGE TO
ENDIF
Ebenfalls könnten Sie den Benutzer informieren, dass der Beginn der Tabelle erreicht wurde. Dabei müssen Sie lediglich die IF BOF( )-Anweisung in navPrior.Click folgendermaßen ändern:
IF BOF()
GO TOP
SET MESSAGE TO "Top of the table"
ELSE
SET MESSAGE TO
ENDIF
Wurden diese Änderungen in den Klassen navNext und navPrior eingearbeitet, dann wirken sie sich automatisch auf die entsprechenden Schaltflächen in vcr und vcr2 aus.
Hinzufügen von VCR zu einer Formularklasse
Nachdem vcr als Steuerelement definiert wurde, kann das Steuerelement in die Definition eines Containers eingefügt werden. Der folgende zu Navclass.prg hinzugefügte Code definiert z. B. ein Formular mit zusätzlichen Navigationsschaltflächen:
DEFINE CLASS NavForm AS Form
ADD OBJECT oVCR AS vcr
ENDDEFINE
Ausführen des Formulars, in dem VCR enthalten ist
Nachdem die Formularunterklasse definiert wurde, ist es sehr leicht für Sie, diese mit Hilfe der entsprechenden Befehle anzuzeigen.
So zeigen Sie das Formular an
Laden Sie die Klassendefinition:
SET PROCEDURE TO navclass ADDITIVEErstellen Sie ein Objekt, das auf der
navform-Klasse basiert:frmTest = CREATEOBJECT("navform")Rufen Sie die Show-Methode des Formulars auf:
frmTest.Show
Wenn Sie die SetTable-Methode von oVCR (das VCR-Objekt in NavForm) nicht aufrufen, dann wird, wenn der Benutzer auf die Navigationsschaltflächen klickt, der Datensatzzeiger der Tabelle im aktuellen Arbeitsbereich verschoben. Sie können über die SetTable-Methode angeben, in welcher Tabelle der Datensatzzeiger verschoben werden soll.
frmTest.oVCR.SetTable("customer")
Anmerkung Wenn der Benutzer das Formular schließt, wird
frmTestauf einen NULL-Wert (.NULL.) gesetzt. Mit Hilfe des Befehls RELEASE können Sie die Objektvariable aus dem Arbeitsspeicher entfernen. In Programmdateien erstellte Objektvariablen werden aus dem Arbeitsspeicher entfernt, wenn das Programm beendet wird.
Siehe auch
Programmgesteuertes Schreiben von Klassendefinitionen | Richtlinien für Methoden- und Ereigniscode | Definition eines Datenraster-Steuerelements | Caption-Eigenschaft | Height | SetAll | Objektorientierte Programmierung