Access
 sql >> Datenbank >  >> RDS >> Access

TreeView ImageCombo Drop-Down-Zugriffsmenü

Einführung.

In dieser Sitzung des TreeView-Steuerelement-Tutorials lernen wir, das ImageComboBox-Steuerelement zu programmieren. Wir erstellen ein MS-Access-Projekt-Dropdown-Menü mit ImageCombo Control. Es gibt ein zweites ImagecomboBox-Steuerelement zum Anzeigen der Bilder und ihrer Schlüsselwerte aus der ImageList Steuerung. Für diese beiden ImageComboBox-Steuerelemente wurde die Liste der Bilder einem gemeinsamen ImageList-Steuerelement entnommen. Die Bilder wurden in einer früheren Sitzung dieser Tutorial-Serie manuell vom Computer in das ImageList-Steuerelement hochgeladen.

Im Folgenden finden Sie die Tutorial-Sitzungen zur Steuerung der Baumansicht, die wir bisher behandelt haben:

Die Tutorial-Sitzungslinks für das TreeView-Steuerelement.

  1. Tutorial für das Microsoft TreeView-Steuerelement
  2. Zugriffsmenü mit TreeView-Steuerelement erstellen
  3. Bilder dem TreeView-Steuerelement zuweisen
  4. Zuweisen von Bildern zu TreeView Control-2
  5. TreeView Control-Häkchen hinzufügen Knoten löschen

Die Demo-Ansicht beider ImageComboBoxen erweitert.

Das fertige Dropdown-Menübild des MS-Access-Projekts ist unten angegeben:

Das Designansichtsbild des obigen Formulars ist unten angegeben:

Die Dropdown-Quelldaten der ImageComboBox.

Die Quelldaten des neuen MS-Access-Projekt-Dropdown-Menüs stammen aus unserem früheren Access-Menü-Projekt.

Laden Sie die Demo-Datenbank jetzt herunter, falls Sie dies noch nicht getan haben, vom 4. Punkt Link oben angegeben. Wenn Sie dies tun, haben Sie alle erforderlichen Datenobjekte, um mit der aktuellen Sitzung fortzufahren.

Es gibt drei Tabellen:Kategorien, Produkte und das Menü Tisch. Es gibt zwei Formulare zum Anzeigen der Kategorien- und Produktdaten und ein Datenfilterparameterformular für den Bericht.

Wir haben zwei weitere Formulare:frmMenu und frmMenu2 die wir für unsere früheren Tutorial-Sitzungen verwendet haben.

Sie finden zwei Berichte zur Vorschau der Kategorien- und Produktdatenelemente.

Zwei Makros zum Anzeigen einiger einfacher Nachrichten. Die Makros können zum Sequenzieren von Aktionsabfragen für die Datenverarbeitung für komplizierte Berichte verwendet werden. Diese Aktionen wurden durch Auswahl von Optionen aus dem Projektmenü des TreeView-Steuerelements in der früheren Tutorial-Sitzung durchgeführt.

Wir brauchen all diese Objekte auch hier, weil wir mit der ImageComboBox ein neues Drop-Down-Menü erstellen werden Steuerung. Wir müssen in der Lage sein, alle diese Objekte zu öffnen, indem wir die Optionen im neuen Drop-Down-Steuerungsmenü auswählen, genauso wie wir es bei frmMenu2 getan haben Formular unter Verwendung des TreeView-Steuerelements in derselben Datenbank.

Das Menü Das Tabellenbild ist unten als Referenz angegeben.

Vorbereitung des Designs des Dropdown-Menüformulars.

Überprüfen Sie die Entwurfsansicht des Menüformulars oben, dort haben wir zwei menübezogene Steuerelemente. Ein ImageList-Steuerelement und ein ImageComboBox-Steuerelement. Ein weiteres ImageComboBox-Steuerelement wurde auf der rechten Seite des Formulars platziert, um die ImageList’s anzuzeigen Bilder.

  1. Erstellen Sie eine Kopie der ImageList Steuerung über frmMenu2 Form und fügen Sie es in ein neues Formular ein, sagen Sie frmMenu3Combo .

    Dieses Bildlisten-Steuerelement enthält Bilder, die wir in unserer früheren Tutorial-Sitzung manuell vom Computer hochgeladen haben. Sie können das Eigenschaftsblatt öffnen und die Bilder und ihren Schlüssel überprüfen Namen. Klicken Sie mit der rechten Maustaste auf das ImageList-Steuerelement, markieren Sie ImageListCtl-Objekt und wählen Sie die Option Eigenschaften.

  2. Das auf der linken Seite des Formulars platzierte ImageComboBox-Steuerelement ist für das Dropdown-Menü mit dem Namen:imgCombo1 . Suchen Sie Microsoft ImageComboBox-Steuerelement aus den ActiveX-Steuerelementen gruppieren und auf dem Formular platzieren. Ändern Sie den Namen des Steuerelements in imgCombo1 .

  3. Erstellen Sie auf der rechten Seite ein weiteres ImageComboBox-Steuerelement mit dem Namen imgCombo2 . Die zweite ImageComboBox verwenden wir zum Anzeigen der Bilder und ihrer Schlüsselnamen aus der ImageList0 Steuerung als Dropdown-Liste.

  4. Fügen Sie über dem zweiten ImageComboBox-Steuerelement ein Label-Steuerelement hinzu und ändern Sie dessen Caption in Image List.

Die Bilderliste im Bild-Kombinationsfeld-Steuerelement.

Zuerst werden wir mit dem zweiten imgCombo2 arbeiten Steuern und zeigen Sie die Liste der Bilder über das ImageList-Steuerelement an. Sobald Sie mit dem Code vertraut sind, werden Sie das Verfahren zur Erstellung des Drop-down-Menüs sehr leicht verstehen.

Wir haben die frmMenu3Combo geteilt Bilden Sie den VBA-Code des Moduls in zwei Teile. Lassen Sie uns den ersten Teil nehmen und sehen, was wir darin haben.

Kurz gesagt wurden im globalen Deklarationsbereich die Hauptobjektvariablen deklariert. Das Form_Load() Die Ereignisprozedur initialisiert das ImageList-Steuerelement auf dem Formular mit seiner Objektvariablen objimgList und ruft die cboImageList() auf Unterroutine zum Hinzufügen von Bildern aus dem ImageList-Steuerelement zum zweiten ImageComboBox-Steuerelement. Sehen wir uns den Code genauer an.

Der erste Teil des VBA-Codes mit Form_Load() und cboImageList() Unterroutinen, die unten aufgelistet sind:

Dim imgcombo1 As MSComctlLib.ImageCombo
Dim imgCombo2 As MSComctlLib.ImageCombo
Dim objimgList As MSComctlLib.ImageList
Const KeyPrfx As String = "X"

Private Sub Form_Load()

Set objimgList = Me.ImageList0.Object

cboImageList 'load imagelist-combo

'CreateMenu 'Create Drop-Down Menu
 
End Sub

Private Sub cboImageList()
Dim j As Integer
Dim strText As String

Set imgCombo2 = Me.ImageCombo2.Object
imgCombo2.ImageList = objimgList

For j = 1 To objimgList.ListImages.Count
    strText = objimgList.ListImages(j).Key
    imgCombo2.ComboItems.Add , , strText,j,,j
Next
    imgCombo2.ComboItems(1).Selected = True
End Sub

Überprüfung des VBA-Codes.

Im globalen Deklarationsbereich haben wir zwei ImageComboBox-Steuerelemente deklariert, imgCombo1 für das Projektmenü und imgCombo2 zum Anzeigen von Bildern aus der ImageList Steuerung. Die objimgList Variable, die für das ImageList-Steuerelement im Formular deklariert ist. Die Keyprfx Variable mit dem Zeichen X als Konstante deklariert.

Innerhalb von Form_Load() Ereignisprozedur die objimgList wird mit dem ImageList-Steuerelement auf dem Formular mit der Anweisung initialisiert:Set objimgList =Me.ImageList0.Object. Jetzt sind alle vorab geladenen Bilder im ImageList-Steuerelement für den Zugriff über das objimgList-Objekt verfügbar.

Die nächste Anweisung ruft die Unterroutine cboImageList() auf um alle Bilder zu ImgCombo1 hinzuzufügen Kontrolle.

Das CreateMenu() Unterprogrammaufruf wurde vorerst auskommentiert.

In den cboImageList() s ubroutine wurden zwei Variablen deklariert.

Als nächstes die Anweisung Set imgCombo2 =Me.ImageCombo2.Object weist die zweite ImagecomboBox im Formular der Objektvariablen imgCombo2 zu.

Wie das TreeView-Steuerelement das imgCombo2 hat eine ImageList -Eigenschaft, um die Referenz des ImageList-Steuerelements an das ImageComboBox-Steuerelement zu übergeben, um auf die Eigenschaften der ImageList zuzugreifen. Die nächste Anweisung:imgCombo2.ImageList =objimgList tut das.

Als nächstes wird das For . . . Weiter Schleife wird für die Anzahl der Bilder im ImageList-Steuerelement ausgeführt.

Key- des ersten Bildlistenelements Wert ('form_close') wurde im strText gespeichert Variable. Hier haben wir den Key-Wert des Bildlisten-Steuerelements als Text oder als Beschreibung des ImageCombo-Bilds verwendet, da dies der einzige verfügbare Text ist. Das Tag Eigenschaft ist leer und wir haben andere Verwendungen mit dieser Eigenschaft, wenn wir mit dem Dropdown-Menü arbeiten.

Die nächste Anweisung ist die wichtige, die wir uns genauer ansehen müssen, das Add Methode des ImageComboBox-Steuerelements. Die Syntax der Anweisung ist wie folgt:

imgCombo2.ComboItems.Add [Index],[Key],[Text],[Image],[SelImage],[Indentation]

Alle Parameter von Add() Methode sind optional. Für unseren ersten Testlauf dieses Steuerelements verwenden wir Werte für [Text], [Image], und [Einzug] nur. Nachdem wir uns das Ergebnis des ersten Testlaufs der Bildlistenansicht angesehen haben, verwenden wir den Parameterwert [Einzug] für dieses ImageCombo-Steuerelement nicht.

Hinweis:Denken Sie jedoch daran, dass wir die Einrückung benötigen Eigenschaftswert für das Dropdown-Menü, damit die Menüelemente im TreeView-Steuerelement wie Root-Node und Child-Node aussehen. Wir werden den [Schlüssel] verwenden Parameter auch (sowohl für Schlüssel- als auch für Textparameter), um auf das Tag eines bestimmten Menüpunkts zuzugreifen Eigentumswert.

Bildliste mit aufsteigender Einrückung Parametereinstellung.

Die erste Testlauf-Bildliste in ImageCombo2 sieht wie das unten angegebene Bild aus, nachdem inkrementelle Werte für die Einrückung angewendet wurden.:

Die Wirkung der Einkerbung wird aus dem obigen Probelaufbild deutlich. Jedes Element wurde nach rechts verschoben, um eine Stelle größer als das vorherige. Wir können diese Funktion nutzen, um unsere Projektmenüpunkt-Knoten so zu positionieren, dass sie wie Root-Level- und Child-Knoten aussehen.

Nach dem strText value (‘form_close’) die erste Variable j bezieht sich auf die Indexnummer der ImageList, den [SelImage]-Parameter, den wir übersprungen haben, und den nächsten Wert in j wurde zum Einrücken jedes Listenelements verwendet, wenn es in die ComboBox-Liste eingefügt wurde. Nach dem ersten Testlauf und nach Ansicht des Ergebnisses können Sie alle Parameter nach dem Bildindexwert entfernen.

Die nächste Anweisung:imgCombo2.ComboItems(1).Selected =True wählt das erste Element in der ComboBox aus. Wenn Sie ein Element aus dem ImageCombo-Steuerelement über den Code Change() auswählen Das Ereignis wird ausgelöst, aber nicht, wenn Sie ein Element direkt im Formular auswählen. Das Update() Ereignis ignoriert manuelle Aktualisierung des Ereignisses und versucht, es über Code aufzurufen.

Speichern Sie das Formular frmMenu3Combo und öffnen Sie es in der Normalansicht. Erweitern Sie das zweite ImageList ComboBox-Steuerelement, und zeigen Sie das Ergebnis an. Entfernen Sie die Kommas und die Variable j am Ende, nach der ersten Variable j, die für die ImageList-Indexnummer beibehalten wird.

Das Dropdown-Menü VBA-Code des Projekts.

Jetzt fahren wir mit dem zweiten Teil des VBA-Codes des Formularmoduls fort, um zu lernen, wie man das Access-Dropdown-Menü erstellt und wie man Access-Formulare, -Berichte und -Makros öffnet, indem man das ComboBox-Steuerelementelement auswählt.

Der zweite Teil des VBA-Codes besteht aus CreateMenu() Subroutine und ImageCombo1_Click() e Entlüftungsverfahren, ist unten aufgeführt:

Private Sub CreateMenu()
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String
Dim strKey As String
Dim strText As String
Dim typ As Integer

Set imgcombo1 = Me.ImageCombo1.Object
imgcombo1.ImageList = objimgList

strSQL = "SELECT ID, Desc, PID, Type,Macro,Form,Report FROM Menu;"

Set db = CurrentDb
Set rst = db.OpenRecordset(strSQL, dbOpenDynaset)

Do While Not rst.EOF And Not rst.BOF
    If Len(Trim(Nz(rst!PID, ""))) = 0 Then
        strKey = KeyPrfx & CStr(rst!ID)
        strText = rst!Desc
        imgcombo1.ComboItems.Add , strKey, strText, 1, 2, 1 ' image index 1,2([image],[selectedimage])
        'imgcombo1.ComboItems.Add , strKey, strText, "folder_close", "folder_open", 1
    Else
        strKey = KeyPrfx & CStr(rst!ID)
        strText = rst!Desc
        imgcombo1.ComboItems.Add , strKey, strText, 4, 5, 4 'last param is spacing
        'imgcombo1.ComboItems.Add , strKey, strText, "left_arrow", "right_arrow", 4
     
        'Check for the presense of Type Code
        If Nz(rst!Type, 0) > 0 Then
                typ = rst!Type
                With imgcombo1.ComboItems
            Select Case typ
                'save type Code & Form/Report/Macro Name in Tag Property
                Case 1
                    .Item(strKey).Tag = typ & rst!Form
                Case 2
                    .Item(strKey).Tag = typ & rst!Report
                Case 3
                    .Item(strKey).Tag = typ & rst!Macro
            End Select
                End With
        End If
        
    End If
    rst.MoveNext
Loop
rst.Close
imgcombo1.ComboItems.Item(1).Selected = True
End Sub

Private Sub ImageCombo1_Click()
Dim strObject As String
Dim strTag As String
Dim typ As Integer

strTag = ImageCombo1.SelectedItem.Tag
typ = Val(strTag)
strObject = Mid(strTag, 2)

Select Case typ
    Case 1
        DoCmd.OpenForm strObject, acNormal
    Case 2
        DoCmd.OpenReport strObject, acViewPreview
    Case 3
        DoCmd.RunMacro strObject
End Select

End Sub

Ich denke, bevor Sie mit dem VBA-Code beginnen, sollten Sie sich das Tabellenbild (drittes Bild von oben auf dieser Seite) ansehen, falls Sie dies nicht in der früheren Sitzung der Access-Projektmenüerstellung getan haben.

Die ID Das Feld hat einen eindeutigen ID-Wert und ist ein AutoWert-Feld.

Das zweite Feld Desc hat Objekttypgruppennamen (Formulare, Berichte und Makros) und tatsächliche Objektnamen von Formularen, Berichten und Makros.

Die PID Der Feldwert (Übergeordnete ID) ist für Objektgruppennamen leer:Formulare, Berichte, und Makros . Diese leeren PID-Wert-Elemente positionieren wir an der linken Position im ImageComboBox-Dropdown-Menü mit einem Zeichenabstand Einrückung, und andere Elemente werden mit vier Zeichen Abstand nach vorne verschoben. Mit dieser Positionierung von Elementen sehen sie aus wie die Knoten der Stammebene und der untergeordneten Ebene in einem TreeView-Steuerelement, aber wir werden die verbindenden Baumlinien vermissen.

Überprüfen Sie das Bild im ImageComboBox-Steuerelement für ausgewählte Elemente, das Bild befindet sich ganz links. Das Gruppenelement in der nächsten Zeile wird nach einem Zeichenabstand auf der linken Seite positioniert, und andere Gruppenelemente erscheinen ebenfalls an derselben Position. Die Elemente der untergeordneten Elemente unter jeder Gruppe wurden nach vier Leerzeichen positioniert.

Der PID-Feldwert wurde überprüft, und wenn er leer ist, nehmen wir an, dass es sich um einen Gruppennamen handelt, andernfalls handelt es sich um einen Access-Objektnamen, den wir öffnen müssen, wenn der Benutzer darauf klickt, und ihn als untergeordnete Mitglieder der Gruppe positionieren. Der tatsächliche Schlüsselwert im PID-Feld ist hier nicht wichtig. In jedem Fall brauchen wir es hier. Aber wir können stattdessen den Typfeldwert für diesen Zweck verwenden.

Als nächstes der Typ enthält den Objekttyp Code:1 – Formularname , 2 – Berichtsname, und 3 – Makroname . Die nächsten drei Felder:Formular, Bericht und Makro haben die tatsächlichen Objektnamen basierend auf ihren jeweiligen Codes im Feld Typ. Ich habe der Übersichtlichkeit halber drei verschiedene Felder verwendet, sie können auch alle in einer Spalte platziert werden.

Der Typencode und Objektname Paar (z. B. 2rptCategories ) wird im Tag der ImageComboBox gespeichert Eigentum.

Die Subroutine CreateMenu().

Nun zum VBA-Code der Subroutine CreateMenu().

Die Datenbank und andere Variablen wurden am Anfang deklariert.

Die imgcombo1 Objektv ariable wurde mit The Me.ImageCombo1 initialisiert. Das Objekt auf dem Formular.

Als nächstes die imgCombo1.ImageList -Eigenschaft wurde mit dem ImageList-Objekt objimgList Reference geladen , damit wir direkt auf die Indexnummer und die Schlüsselwerte der ImageList zugreifen können.

Als nächstes das Menü Der Tabellendatensatz ist mit dem SQL-String geöffnet.

Der PID-Feldwert wurde geprüft, wenn er leer ist dann ist es ein Objektgruppenname, die ID value wird das Konstante X vorangestellt und im strKey gespeichert Variable. Das Feld Desc Wert wurde in strText gespeichert Variable.

Die nächste Anweisung ruft die Add()-Methode des ImageComboBox-Steuerelements auf und das erste Element wurde dem Dropdown-Menü hinzugefügt.

imgcombo1.ComboItems.Add , strKey, strText, 1, 2, 1

Der erste Parameterwert Indexnummer wurde weggelassen, wird aber automatisch erstellt. Der strKey Variable besteht aus dem ID-Feldwert 1 mit Präfixkonstante X (X1 ) als Schlüssel Parameter. Der strText enthält die Desc Feldwert. Der nächste Wert 1 ist die ImageList’s des ersten Bildes (Schlüsselwert folder_close ) Indexwert. Wenn Sie den Schlüsselwert „folder_close“ in Anführungszeichen bevorzugen, können Sie dies tun. Nächster Wert 2 ist der Indexwert des zweiten Bildes („folder_open“) oder Sie können „folder_open“ in Anführungszeichen setzen und den letzten Parameter 1 ist für die Einrückung.

Hinweis: Zur Bestätigung der Indexreihenfolge von Bildern in der ImageList Überprüfen Sie die Reihenfolge der Bildliste in ImageCombo2 Anzeige, die wir zuvor erstellt haben. Wir hätten dem Indexwert dem Schlüsselwert ein Leerzeichen voranstellen können, um diese Zahl auch zum Schlüsselwert hinzuzufügen, damit sie wie [Bild] 1 form_close aussieht. [Bild] 2 form_open und so weiter . . . Dies überlasse ich Ihnen als Übung für sich selbst.

Wenn der Wert des PID-Felds nicht Null ist, dann ist die eigentliche Menüoption Hinzufügen ed unter Else Klausel. Hier haben wir wie zuvor ein weiteres ImageCombo-Element hinzugefügt. Für [Bild] und [SelImage] params haben wir den ImageList Item Index-Wert 4 genommen und 5 . Der Einrückungsparameterwert ist 4 Leerzeichen.

Im Add() des ImageCombo Items Methode unter Else -Klausel müssen wir den Zugriffsobjektnamen (frmData Entry) speichern zusammen mit dem Typ Code 1 im Tag (ImageCombo1.ComboItems.Item(strKey).Tag) Eigentum. Wenn der Benutzer dieses Element aus dem Dropdown-ComboBox-Menü auswählt, wird das Click() Ereignisfeuer, das Tag Der Eigenschaftswert wurde extrahiert, der Typencode wurde überprüft, wenn der Typencode 1 ist (Formular) und dann den Formularnamen in der Tag-Eigenschaft (frmData Entry) wird mit DoCmd.OpenForm geöffnet Befehl.

Auf diese Weise das gesamte Menü Dem Image ComboBox-Steuerelement wurden Tabellendatensätze hinzugefügt.

Die Anweisung imgcombo1.ComboItems.Item(1).Selected =True wählt das erste Element als Standardelement im Bild-ComboBox-Steuerelement aus. Zu dieser Codeausführungszeit wird Change() Ereignis wird ausgelöst, aber nicht, wenn ein Element durch Anklicken in der Formularansicht ausgewählt wird.

Hinweis: Bevor Sie das Formular für den Dropdown-Menü-Testlauf öffnen, entfernen Sie bitte das Kommentarsymbol aus dem „Menü erstellen“ Aufrufzeile in Form_Load() Ereignisprozedur. Wir haben diese Zeile vorübergehend auskommentiert, während Testläufe der Bildanzeige von ImageList Control in ImageCombo2 Control.

Das ImageCombo1_Click() Das Ereignis wird ausgelöst, wenn der Benutzer ein Element aus dem Image ComboBox-Steuerelement auswählt. Das Tag des ausgewählten Elements Der Eigenschaftswert wurde auf Typcode und Objektname überprüft und mit Docmd.Objecttype ObjectName geöffnet .

Die Demo-Datenbank ProjectMenuV221.accdb im .zip-Format unten zum Download bereitgestellt.

Laden Sie ProjectMenuV221.zip herunter

WÖRTERBUCHOBJEKT

  1. Wörterbuchobjekte – Grundlagen
  2. Wörterbuchobjekt-Grundlagen-2
  3. Sortieren von Dictionary-Objektschlüsseln und -Elementen
  4. Datensätze aus Wörterbuch anzeigen
  5. Klassenobjekte als Wörterbucheinträge hinzufügen
  6. Klassenobjekt-Wörterbuchelement aktualisieren