Produkt: | Elvis |
Version: | 2.3 |
Stand: | 2005-04-06 |
Zusammenfassung
Manchmal möchte man innerhalb der Ereignisverarbeitung der Bedienstation bestimmte Zustände behalten, um sie später in anderen Ereignissen benutzen zu können. Beispiele:
- Zusammensetzen eines Wertes aus verschiedenen Ereignissen (z.B. Zahleneingabe auf einem „Ziffernblock“)
- Zwischenspeichern von aufwändig berechneten Werten
Dieser Artikel beschreibt verschiedene Möglichkeiten, solche Zustände zu speichern.
Einzelheiten
Möglichkeit 1: Datenpunkt-Eigenschaft
Von der Ereignisverarbeitung kann man über Database.Datapoint(name).eigenschaft auf Datenpunkteigenschaften zugreifen und dort Zustände merken.
Achtung: Wenn mehrere Bedienstationen gleichzeitig aktiv sind, benutzen bei dieser Lösung alle den gleichen Wert! Ob das erwünscht ist, hängt von der Anwendung ab, meistens ist das nicht der Fall.
Diese Methode merkt sich Werte auch über die Lebensdauer der Seite, je nach „Persistenz“ des Datenpunktes auch über die Laufzeit des Servers, hinaus.
Beispiel:
//CODE:vb:Sub MyButton_Click()
Database.Datapoint("Page5_State").ActualValue = 1
End Sub//CODE
Möglichkeit 2: Kontrollelement-Eigenschaft
Von der Ereignisverarbeitung kann man über <tt>Form.name.eigenschaft</tt> auf Kontrollementeigenschaften zugreifen und dort Zustände merken. Das Kontrollelement kann ein sowieso auf der Seite vorhandenes Element sein, oder ein speziell für diesen Zweck eingefügtes (evtl. verstecktes) Kontrollelement sein. Die möglichen Eigenschaften hängen vom Typ des Kontrollelements ab, eine Liste finden Sie im Elvis-Projektierer-Handbuch im Kapitel Bedienstation-Objekte, Unterkapitel Kontrollelement.
Die Kontrollelemente (und ihre Eigenschaften) existieren für jede Seite getrennt und solange die Seite dargestellt wird, daher beeinflussen sich verschiedene Seiten nicht.
Um ein Kontrollelement zu verstecken, fügen Sie in Form_Load folgende Zeile ein:
Form.name.Visible = False
Form.name.Enabled = False
Beispiele:
//CODE:vb:Sub Button1_Click()
Form.TextOutput1.Caption = Form.TextOutput1.Caption & "1"
End Sub//CODE
//CODE:vb:Sub Button2_Click()
Form.AnalogInput1.Value = CInt(Form.AnalogInput1.Tag)
End Sub//CODE
Möglichkeit 3: Variable unter (global)
In der Ereignisverarbeitung können für jede Seite globale Variablen definiert werden. Diese können innerhalb einer Ereignisverarbeitung benutzt werden. Allerdings behalten diese Variablen ihre Werte nur während ein Ereignis (Form_Load, Form_Unload, Form_DatapointChanged, Kontrollelement_Ereignis) abgearbeitet wird, so dass sie für diesen Zweck eher nicht brauchbar sind.
Möglichkeit 4: Registry
Es ist recht einfach, den Zustand in einem Wert in der Registry abzuspeichern, dazu stehen die eingebauten Funktionen SetPersistentValue/GetPersistentValue zur Verfügung (siehe Hilfefunktion zur Elvis-Projektierung).
Wenn mehrere Bedienstationen gleichzeitig auf dem gleichen Computer aktiv sind, benutzen bei dieser Lösung alle den gleichen Wert! Das dürfte in der Praxis aber wohl kein Problem darstellen.
Beispiel:
//CODE:vb:Sub ButtonCount_Click()
Dim count As Integer
count = GetPersistentValue("Page5", "Count", 0)
SetPersistentValue "Page5", "Count", count+1
End Sub//CODE