Status aus einem Feld des Datensatzes anzeigen
Zeigen Sie den Zustand des aktuellen Datensatzes – „läuft“, „gestoppt“, „Fehler“ – als farbigen Status in einer Zeile
auf einem Einzelformular oder im Formularkopf an, mit einem an ein Feld gebundenen WklStatusLabel.
Voraussetzungen: WKL Forms Object Library 1.23 oder höher.
Lösungsüberblick
- Binden Sie es wie ein Textfeld: Steuerelementinhalt (
ControlSource) nennt das Feld oder einen Ausdruck. Access schreibt bei jedem Datensatzwechsel den Wert des aktuellen Datensatzes in die Statusanzeige; die Statusanzeige schreibt nie zurück. - Werte werden zu Text und Art über Einträge (
AddStatusItem): ein Eintrag je Wert, mit dem angezeigten Text und der Art (wskOk,wskWarn,wskBad,wskInfo,wskNeutral), die die Farben bestimmt. Werte ohne Eintrag zeigen den mitFormatformatierten Wert in der im Entwurf festgelegtenKind. - Oder übernehmen Sie die Art aus einem anderen Feld (
KindField), wenn der Datensatz sie speichert: als Zahl 0–5 oder als Name wieokoderbad. - Das Aussehen wählen Sie mit
Display: eine Pille (wsdPill), ein Punkt (wsdDot) oder ein Symbol (wsdSymbol) vor dem Text;Captionsetzt einen schlichten Text davor („Dienst“).
Umsetzung
Ein Formular frmDienst ist an tblDienst gebunden, dessen Feld Zustand 0, 1 oder 2 enthält, und hat eine
Statusanzeige stZustand. Die Einträge werden einmalig in der Entwurfsansicht hinzugefügt und mit dem Formular
gespeichert:
' Once, in design view (for example from the Immediate window); saved with the form.
DoCmd.OpenForm "frmDienst", acDesign
With Forms!frmDienst!stZustand
.ControlSource = "Zustand"
With .Object
.Caption = "Dienst"
.Display = wsdPill
.ClearStatusItems
.AddStatusItem 0, "gestoppt", wskNeutral
.AddStatusItem 1, "läuft", wskOk
.AddStatusItem 2, "Fehler", wskBad
.NullText = "unbekannt"
End With
End With
DoCmd.Close acForm, "frmDienst", acSaveYes
Speichert der Datensatz die Art in einem eigenen Feld (Art: ok, warn, bad …) und den Text in einem anderen
(Meldung), binden Sie den Text und nennen Sie das Feld für die Art:
With Forms!frmDienst!stMeldung
.ControlSource = "Meldung"
.Object.KindField = "Art"
End With
Während eine lange Aktion läuft, zeigen Sie das mit dem Aktivitätspuls an:
Me!stZustand.Object.Busy = True ' ... the action ... Me!stZustand.Object.Busy = False
Hinweise
- Wo es stehen kann: auf Einzelformularen, in Formularköpfen und -füßen, auf UserForms in Excel und Word. Nicht im Detailbereich eines Endlosformulars: Access legt dort eine einzige Instanz an, und eine gebundene verhindert, dass Access das Formular öffnet. Ein Status je Datensatz einer Liste gehört in eine Statusspalte eines
WklGrid(wedStatus), die dieselben Einträge annimmt. - Code ändert denselben Datensatz: Die Statusanzeige folgt Datensatzwechseln von selbst. Ändert Code das Feld für die Art, ohne zu einem anderen Datensatz zu wechseln, rufen Sie
Refreshauf. - Farbe nie allein: Der Text wird immer angezeigt, und hoher Kontrast wird berücksichtigt; Bildschirmsprachausgaben hören Beschriftung, Text und Art.