Warum noch ein Access-Buch?
Für wen ist das Buch?
Jetzt bestellen
+ direkter Download des eBooks!
Nur EUR 59,95!
Fehler gefunden?
Bitte melden!
Wünsche an das Buch?
Her damit!
Was denken die Leser über dieses Buch?
Lesen Sie aktuelle Rezensionen!
Kapitel des noch nicht veröffentlichten Buchs zum Downloaden, Probelesen und Kommentieren
Beispieldatenbanken
Zusätzliches Material

Das Buch im HTML-Format

Für unbestimmte Zeit bieten Addison-Wesley und André Minhorst den kompletten Inhalt des Buchs als Download an. Schauen Sie rein und informieren Sie sich über den Inhalt! Und wenn Ihnen das Buch nützlich erscheint und Sie glauben, dass Sie etwas gelernt haben oder durch das Gelesene sogar etwas Zeit und somit Geld bei Ihrer Arbeit einsparen konnten, können Sie sich ja beim Autor und beim Verlag revanchieren - beispielsweise durch den Kauf dieses Buchs.

Am schönsten wäre es natürlich, wenn Sie das Buch direkt hier bestellen - Sie erhalten das Buch dann direkt vom Verlag, und der Autor und Verlag haben dann noch mehr davon, als wenn Sie es anderswo kaufen.

Danke für Ihr Interesse!

12.6.3 Textfelder

12.6.4 Kombinationsfelder I: Das comboBox-Element

Es gibt in Ribbons zwei Typen von Kombinationsfeldern: comboBox und dropDown. Beide haben Eigenschaften, die Sie vermutlich gerne in einem vereint sehen würden - warum, erfahren Sie in den folgenden Abschnitten. Zunächst lernen Sie dabei das comboBox-Element kennen. comboBox-Kombinationsfelder in Ribbons bieten wie ihre Formular-Pendants einen oder mehrere Werte zur Auswahl an. Das schreit natürlich nach dem dynamischen Füllen per VBA, zunächst aber soll ein einfaches Beispiel den grundlegenden Aufbau veranschaulichen.



    
             ...
        
                  label="Kombinationsfeld:">
            
            
            
        

        

    

    


Listing 12.10: Diese Ribbon-Definition erzeugt ein tab-Element mit einem Kombinationsfeld

Der Aufbau ähnelt dem eines Kombinationsfeldes in HTML. Das comboBox-Element schließt die enthaltenen item-Elemente ein, die Informationen über die zur Auswahl stehenden Einträge enthalten. Das obige XML-Dokument führt zum Ribbon in Abbildung 12.17.

Abbildung 12.17: Ein Ribbon mit einer zweiten Gruppe und einem einfachen Kombinationsfeld

Kombinationsfeld dynamisch füllen

Das dynamische Füllen eines einfachen comboBox-Elements erfolgt durch drei Callback-Funktionen. Die erste ermittelt die Anzahl der einzufügenden Einträge, die zweite die IDs und die dritte die Beschriftungen der Einträge. Der XML-Code für das Ribbon sieht wie im folgenden Listing aus, die für den Aufruf der Callback-Funktionen verantwortlichen Attribute sind fett markiert:



    
          label="Kombinationsfeldbeispiel" visible="true">
        
                     id="cboBeispielkombinationsfeld"
            label="Kombinationsfeld:"
            getItemCount="GetItemCount"
            getItemID="GetItemID"
            getItemLabel="GetItemLabel">
        

        

    

    


Listing 12.11: Ribbon-XML-Dokument für das dynamische Füllen eines Kombinationsfeldes

Die drei VBA-Callback-Funktionen sehen wie im folgenden Listing aus. Die Routine GetItemCount liefert die Anzahl der Einträge zurück, in diesem kleinen Beispiel sind dies drei. GetItemID ermittelt die IDs der anzuzeigenden Einträge, die hier aus dem Text »Testindex« und dem Wert des vom Ribbon gelieferten Index zusammengestellt werden. Fehlt noch die Beschriftung, die in GetItemLabel auf ähnliche Weise wie in der Routine GetItemID entsteht. Das resultierende Kombinationsfeld sieht im ausgeklappten Zustand schließlich wie in Abbildung 12.18 aus.

Public Sub GetItemCount(control As IRibbonControl, ByRef count)
    count = 3
End Sub

Public Sub GetItemID(control As IRibbonControl, index As Integer, ByRef id)
    id = "Testindex" & index
End Sub

Public Sub GetItemLabel(control As IRibbonControl, index As Integer, _
    ByRef label)
    label = "Testlabel" & index
End Sub

Listing 12.12: Callback-Funktionen zum Füllen eines einfachen Kombinationsfeldes

Abbildung 12.18: Kombinationsfeld mit dynamisch zusammengestelltem Inhalt

Im wirklichen Leben füllen Sie Steuerelemente wie Kombinationsfelder natürlich meist mit Daten aus Tabellen. Dies ist am einfachsten, wenn Sie den Inhalt der Tabelle direkt beim Ermitteln der Anzahl der einzufügenden Datensätze in einem Array zwischenspeichern. Auf dieses können Sie dann einfach über dessen Index zugreifen. Die VBA-Routinen für eine solche Konstellation sehen so aus:

Public Sub GetItemCount(control As IRibbonControl, ByRef count)
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim i As Integer
    Set db = CurrentDb
    Set rst = db.OpenRecordset("SELECT KontaktID, Nachname & ', ' & " _
        & "Vorname AS Kontakt FROM tblKontakte", dbOpenDynaset)
    Do While Not rst.EOF
        ReDim Preserve strKontakte(2, i + 1) As String
        strKontakte(0, i) = rst!KontaktID
        strKontakte(1, i) = rst!Kontakt
        rst.MoveNext
        i = i + 1
    Loop
    count = i
    rst.Close
    Set rst = Nothing

    Set db = Nothing
End Sub

Public Sub GetItemID(control As IRibbonControl, index As Integer, ByRef id)
    id = strKontakte(0, index)
End Sub

Public Sub GetItemLabel(control As IRibbonControl, index As Integer, _
    ByRef label)
    label = strKontakte(1, index)
End Sub

Listing 12.13: Diese Callback-Routinen füllen ein Kombinationsfeld mit den Daten einer Tabelle

Weitere Features von Ribbon- Kombinationsfeldern

Gegenüber herkömmlichen Access-Kombinationsfeldern hat das comboBox-Element in Ribbons einen sehr interessanten Vorteil: Sie können damit jedem Eintrag ein Symbol zuweisen (siehe Abbildung 12.19).

Abbildung 12.19: Ein comboBox-Steuerelement mit Symbolen

Und dies funktioniert ganz einfach - in diesem Fall für vier Bilddateien, die unter den Namen 1.png, 2.png, 3.png und 4.png im gleichen Verzeichnis wie die Datenbank gespeichert sind. Um obige Ansicht zu erhalten, müssen Sie dem comboBox-Element lediglich das Attribut getItemImage mit dem Namen der Callback-Funktion GetItemImage zuweisen. Im gleichen Zug stellen Sie dann auch noch das Attribut onChange auf den Wert OnChange ein - gleich mehr dazu:

id="cboBeispielkombinationsfeld"
label="Kombinationsfeld:"
getItemCount="GetItemCount"
getItemID="GetItemID"

getItemLabel="GetItemLabel"
getItemImage="GetItemImage"
onChange="OnChange"
>

Die folgende Routine gibt schließlich für jedes Element des Kombinationsfeldes eine Objektvariable mit einem Verweis auf eine Bilddatei zurück. Für das Einlesen der Bilddatei ist wiederum die Routine LoadPicturePlus verantwortlich - siehe auch Kapitel 11, »Bilder und binäre Dateien«.

Public Sub GetItemImage(control As IRibbonControl, index As Integer, _
    ByRef image)
    Set image = LoadPicturePlus(CurrentProject.Path & "\" & index + 1 _
        & ".png")
End Sub

Listing 12.14: Einlesen von Bilddateien für die Einträge eines comboBox-Elements per Callback-Routine

Das Attribut OnChange sorgt für den Aufruf der folgenden Routine. Diese wird nach jeder Neuauswahl eines Eintrags des comboBox-Elements aufgerufen und gibt lediglich den Inhalt des ausgewählten Eintrags aus, den das Ribbon mit dem Parameter text übergibt.

Public Sub OnChange(control As IRibbonControl, text As String)
    MsgBox "Sie haben den Eintrag '" & text & "' ausgewählt."
End Sub

Listing 12.15: Ausgabe des aktuellen Eintrags des comboBox-Steuerelements

Genau wie bei den Menüs von Access 2003 und älter kann man hier den Nachteil ausmachen, dass man nicht die ID des ausgewählten Eintrags auswerten kann; diese muss man in Abhängigkeit des angezeigten Wertes selbst ermitteln, denn die Eigenschaft control.id der OnChange-Prozedur liefert immer die ID des comboBox-Steuerelements.

Nächster Abschnitt:

12.6.5 Kombinationsfelder II: Das dropDown-Element

© 2006-2008 André Minhorst Alle Rechte vorbehalten.