Farbschema: Hell
Sie befinden sich hier: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » how-to » Anordnung des Benutzers beibehalten

Anordnung des Benutzers beibehalten

Lassen Sie jeden Benutzer ein Formular so vorfinden, wie er es verlassen hat – oder bewahren Sie die Anordnung an einem eigenen Ort auf, etwa in einer Einstellungstabelle auf dem Server, oder bieten Sie eine Schaltfläche an, die den Entwurf wiederherstellt.

Voraussetzungen: WKL Forms Object Library 1.28 oder höher.

Lösungsüberblick

Ohne Code merken sich beide Layout-Steuerelemente die Anordnung je Windows-Benutzer (AutoSaveLayout, standardmäßig eingeschaltet) unter einem Schlüssel (LayoutKey, Standardwert „Formularname.Steuerelementname“). Layout gibt die Anordnung als Text zurück und übernimmt sie, für Code, der sie anderswo speichert; Reset stellt den Entwurf wieder her und entfernt die gemerkte Anordnung.

WklGrid und WklTreeList tun dasselbe für ihre Spalten: Breiten, Reihenfolge, ausgeblendete Spalten, Bänder, Sortierung, Gruppierung, die Spaltenfilter eines Rasters und die Höhe seiner Detailansichten – mit denselben Eigenschaften, derselben Tabelle und denselben Regeln.

Umsetzung

Für den Standardfall ist nichts zu tun: Jede Änderung durch den Benutzer oder durch Code wird sofort gespeichert und ist beim nächsten Öffnen des Formulars wieder da. Eine Schaltfläche für den Entwurf:

Private Sub cmdDefaultLayout_Click()
    Me!Layout1.Object.Reset      ' also removes the user's row in USysWklLayout
End Sub

Dasselbe für die Spalten eines Rasters:

Private Sub cmdDefaultColumns_Click()
    Me!Grid1.Object.Reset
End Sub

Zwei Formulare, die sich eine Anordnung teilen, oder derselbe Formularname in zwei Dokumenten mit UserForms erhalten einen eigenen Schlüssel (Designerseite Verhalten, Feld Schlüssel, oder per Code, bevor das Formular angezeigt wird):

Private Sub Form_Open(Cancel As Integer)
    Me!Layout1.Object.LayoutKey = "Verwaltung.Hauptlayout"
End Sub

Eigene Speicherung statt der eingebauten – schalten Sie AutoSaveLayout aus, und bewahren Sie den Text auf:

Private Sub Form_Open(Cancel As Integer)
    With Me!Layout1.Object
        .AutoSaveLayout = False
        .Layout = Nz(DLookup("Layouttext", "tblBenutzereinstellungen", "Benutzer = '" & Environ("USERNAME") & "' AND Formular = 'frmVerwaltung'"), "")
    End With
End Sub
 
Private Sub Layout1_AfterLayoutChange(ByVal Pane As String)
    SaveUserSetting "frmVerwaltung", Me!Layout1.Object.Layout ' your own procedure
End Sub

Hinweise

  • In Access kommt die Anordnung in die lokale Tabelle USysWklLayout der Datenbank, die das Formular enthält, eine Zeile je Windows-Benutzer (DOMÄNE\Name) und Schlüssel; das Präfix USys macht sie zu einer ausgeblendeten Systemtabelle. Ein Frontend, das auf jeden Arbeitsplatz kopiert wird, hält die Anordnungen lokal; ein auf einem Terminalserver gemeinsam genutztes hält die Benutzer auseinander. Bei UserForms von Excel und Word kommt sie nach HKEY_CURRENT_USER\Software\The White Knight Labs\Access Framework\Layouts.
  • Eine Anordnung, die dem Entwurf entspricht, wird nicht gespeichert: Reset und Refresh hinterlassen nichts.
  • Ein per Code gesetztes Layout, bevor das Formular angezeigt wird, hat Vorrang vor der gemerkten Anordnung; Code, der Anordnungen anderswo aufbewahrt, wird nie überschrieben.
  • Der Text ist JSON ({"format":"WklDockLayout",...} oder {"format":"WklSplitter",...}); ein Text des jeweils anderen Steuerelements oder ein unlesbarer Text löst wkeInvalidValue aus. Bereiche, die in einem älteren Text fehlen, behalten ihren Entwurf; ein gespeicherter Text übersteht also Änderungen am Formular.
  • Ein schreibgeschütztes Frontend oder ein abgelehnter Schreibvorgang beeinträchtigt das Formular nicht; die Anordnung wird dann einfach nicht gemerkt.
  • Raster und Strukturlisten speichern nur Abweichungen. Eine Spalte, die der Benutzer nie angefasst hat, folgt einer späteren Änderung des Entwurfs; aus dem Entwurf entfernte Spalten werden ignoriert, und neue erscheinen wie entworfen. Ihr Entwurf ist das, was das Steuerelement bei der ersten Anzeige zeigt – mit den Änderungen, die Form_Load per Code vorgenommen hat. Auswahl, Suchtext und aufgeklappte Datensätze werden nicht gemerkt.
  • Detailansichten eines Rasters haben keine eigene Anordnung; ihre Höhe gehört zur Anordnung des Rasters.

Verwandte Themen

de/wiki/msaccess/comctl/how-to/keep-the-users-arrangement.txt · Zuletzt geändert: von Wolfgang van der Stille