12.9.1 Dynamisches Aktualisieren des Ribbons
12.9.2 Beispiel: Abhängige Kontrollkästchen
Die beiden Kontrollkästchen des folgenden Beispiels für die InvalidateControl-Methode sollen eine Abhängigkeit aufweisen, bei der das zweite Kontrollkästchen bei markiertem ersten Kontrollkästchen aktiv ist und umgekehrt (siehe Abbildung 12.37).

Abbildung 12.37: Das untere Kontrollkästchen ist aktiviert, wenn das obere Kontrollkästchen markiert ist und umgekehrt
Dazu ist zunächst eine passende XML-Definition des Ribbons erforderlich:
onLoad="OnLoad"> visible="true"> label="Abhängige Kontrollkästchen">
onAction="chk1_OnAction" getPressed="chk1_GetPressed"/> getEnabled="chk2_GetEnabled"/>
Listing 12.31: Ribbon-XML-Dokument für abhängige Kombinationsfelder
Zunächst muss das customUI-Element die Ereigniseigenschaft onLoad aufweisen und damit die Routine aus folgendem Listing aufrufen.
Sub OnLoad(ribbon As IRibbonUI) Set objRibbon = ribbon boolChk1 = True End Sub
Listing 12.32: Setzen eines Objektverweises auf das Ribbon
Die beiden dort gefüllten Variablen objRibbon zum Speichern eines Verweises auf das Ribbon sowie boolChk1 zum Speichern des Anfangswerts des ersten Kontrollkästchens legen Sie der Einfachheit halber als öffentliche Variablen an:
Public objRibbon As IRibbonUI Public boolChk1 As Boolean
Beim Anlegen des Ribbons ruft Access auch sämtliche in get...-Attributen angegebenen Routinen auf.
Hier sorgt ein getPressed-Attribut dafür, dem ersten Kontrollkästchen den in der Variablen boolChk1 gespeicherten Wert zuzuweisen und ein getEnabled-Attribut aktiviert oder deaktiviert das zweite Kontrollkästchen je nach dem Inhalt von boolChk1:
Sub chk1_GetPressed(control As IRibbonControl, ByRef pressed) pressed = boolChk1 End Sub
Listing 12.33: Diese Routine setzt in Abhängigkeit von boolChk1 einen Haken in das erste Kontrollkästchen
Sub chk2_GetEnabled(control As IRibbonControl, ByRef enabled) enabled = boolChk1 End Sub
Listing 12.34: Aktivieren oder deaktivieren des zweiten Kontrollkästchens in Abhängigkeit von boolChk1
Schließlich fehlt noch ein wenig Aktion - und dafür sorgt die Routine, die beim Anklicken des ersten Kontrollkästchens ausgelöst wird. Sie sorgt dafür, dass boolChk1 den Wert des ersten Kontrollkästchens erhält und das zweite Kontrollkästchen aktualisiert wird - indem es mit der Methode InvalidateControl für den erneuten Aufruf der Methode GetEnabled sorgt.
Sub chk1_OnAction(control As IRibbonControl, pressed As Boolean) boolChk1 = pressed objRibbon.InvalidateControl "chk2" End Sub
Listing 12.35: Beim Klick auf das erste Kontrollkästchen werden der Inhalt von boolChk1 und das Steuerelement chk2 aktualisiert
Wenn Sie diese Technik verwenden, müssen Sie sicherstellen, dass die Objektvariable objRibbon ihren Inhalt nie verliert. Das kann aber der Fall sein, sobald es an beliebiger Stelle des VBA-Projekts zu einem unbehandelten Fehler kommt. Folglich müssen Sie den VBA-Code Ihrer Anwendung für einen reibungslosen Betrieb mit objRibbon komplett mit Fehlerbehandlungen ausstatten.
Nächster Abschnitt:
12.10 Menü- und Symbolleisten aus bestehenden Access 2003-Anwendungen
|