WKL-Steuerelemente per Code in Formulare einfügen
Erstellen Sie Formulare mit WKL-Steuerelementen aus einem Build-Skript, statt die Steuerelemente von Hand einzufügen, etwa für eine Anwendung, deren Formulare generiert oder als Text in der Versionsverwaltung geführt werden.
Voraussetzungen: WKL Forms Object Library 1.31 oder höher.
Lösungsüberblick
- Nicht mit CreateControl.
CreateControlmitacCustomControllegt den Rahmen des Steuerelements an, aber kein ActiveX-Objekt: Access braucht die gespeicherten Daten des Steuerelements (OleData), und die schreibt nur Access selbst, wenn es ein Formular mit dem Steuerelement speichert. - Mit einem Steuerelementbaustein. Ein Steuerelementbaustein ist der Abschnitt
Begin CustomControl … Endeines mitSaveAsTextgespeicherten Formulars. Das Build-Skript fügt ihn in den Text seines Formulars ein und lädt das Formular mitLoadFromText; Access erstellt das Steuerelement aus demOleDatades Bausteins. - Einstellungen in der Entwurfsansicht. Nach dem Laden öffnet das Skript das Formular in der Entwurfsansicht und setzt die Eigenschaften des Steuerelements über
.Object(bei einemWklValidatordessenRules); Access speichert sie mit dem Formular.
Für jedes WKL-Steuerelement gibt es einen freigegebenen Baustein im Standardzustand – über das Dialogfeld von Access
eingefügt, so wie ein Entwickler es einfügt, und für das Release von Access gespeichert – unter
control-blocks im Release-Paket (docs/control-blocks im Repository), eine Datei je Steuerelement: TreeView,
TreeList, Gantt, Grid, Splitter, DockLayout, StatusLabel, NavBar, Button, Validator, ToggleSwitch,
TokenBox, Badge, PropertyGrid, ButtonEdit, SpinEdit, Gauge, KpiCard, ActionBar, Drawer, Barcode,
Image (<Name>.control.txt). Jeder Baustein liegt oben links in seinem Bereich und hat eine brauchbare
Standardgröße; jeder Baustein wird für jedes Release geprüft, indem er in ein neues Formular geladen und dieses in der
Formularansicht geöffnet wird. Das Build-Werkzeug ersetzt Platzhalter-Rechtecke durch diese Bausteine
(Access-Anwendung aus ihren Textquellen bauen).
Umsetzung
- Erstellen Sie das Formular wie gewohnt (
CreateForm,CreateControlfür die eigenen Steuerelemente von Access), schließen Sie es mitacSaveYes, und schreiben Sie es als Text:Application.SaveAsText acForm, "frmIdentity", "frmIdentity.form.txt". Die Datei ist UTF-16 (Unicode), wie Access sie schreibt. - Öffnen Sie den Text, und suchen Sie den Detailbereich: den letzten
Begin Sectionmit seinemName ="Detailbereich"(der Name folgt der Sprache von Access). Seine Steuerelemente stehen in einemBegin … Endinnerhalb des Abschnitts. Fügen Sie die Zeilen des Bausteins vor diesem innerenEndein, eingerückt wie die anderen Steuerelemente. Ein Abschnitt ohne Steuerelemente hat kein inneresBegin … End: Fügen Sie dannBegin, den Baustein undEndvor dem eigenenEnddes Abschnitts ein. - Ändern Sie
Name ="Validator1"des Bausteins in den Namen des Steuerelements im Formular, und fügen Sie für seine Position ZeilenLeft =…undTop =…(Twips) hinzu; der Baustein hat keine, weil Access Werte von 0 weglässt.WidthundHeightstehen im Baustein. - Schreiben Sie den Text als UTF-16 zurück, löschen Sie das Formular (
DoCmd.DeleteObject acForm, "frmIdentity"), und laden Sie es:Application.LoadFromText acForm, "frmIdentity", "frmIdentity.form.txt". - Setzen Sie die Eigenschaften in der Entwurfsansicht:
DoCmd.OpenForm "frmIdentity", acDesign
Forms!frmIdentity.HasModule = True ' the validator needs a module; an empty one is enough
Forms!frmIdentity!Validator1.Object.Rules = "{""fields"":[{""field"":""Login"",""required"":true}]}"
DoCmd.Close acForm, "frmIdentity", acSaveYes
Hinweise
- Ein Baustein je Art von Steuerelement. Ein Baustein enthält die Klasse des Steuerelements (
Class ="WklForms.…") und seine gespeicherten Eigenschaften im Standardzustand. Verwenden Sie die Bausteine des Release, das Sie einsetzen; ein Baustein eines älteren Release lässt sich auch in ein neueres laden (fehlende Einstellungen erhalten ihre Standardwerte). - Namen. Zwei Steuerelemente eines Formulars dürfen nicht denselben Namen haben; ändern Sie
Namevor dem Laden.
Verwandte Themen
- API-Referenz (Englisch): WklValidator