Inleiding.
In deze aflevering van de zelfstudie Tree View Control leren we hoe u Toevoegen/verwijderen knooppunten. De positie van het kandidaat-item Toevoegen/Verwijderen zal worden aangevinkt, waar we willen Toevoegen() de nieuwe Node of naar Remove() het gemarkeerde knooppunt. De toevoeging van de Node kan op hetzelfde niveau zijn als de gemarkeerde Node of als een onderliggende Node.
De Tutorial-sessies van TreeView Control tot nu toe.
- Microsoft TreeView Control-zelfstudie
- Toegangsmenu maken met TreeView Control
- Afbeeldingen toewijzen aan TreeView-besturingselement
- Afbeeldingen toewijzen aan TreeView Control-2
De normale weergave van het Demo Tree View-besturingselement op MS-Access Form, met andere besturingselementen, wordt hieronder gegeven.
De gegevenstabel voor de demo van TreeView Control.
De tabel met de naam Voorbeeld, die we in de eerste zelfstudiesessie hebben gebruikt, zullen we hier ook gebruiken. Het is een kleine tabel met records van Access-database, tabel, formulier- en rapportbesturingselementen, gerangschikt in hiërarchische volgorde en gemakkelijk te begrijpen.
De ID kolom (boomweergave Sleutel ) is een AutoNummering-veld.
Nieuwe bezoekers krijgen een update voor deze zelfstudiesessie.
Als u de eerste zelfstudiesessie niet hebt doorlopen, kunt u de demodatabase downloaden van de tweede sessiepagina:Toegangsmenu maken met Tree View-besturing. Er is een tabel in die database met de naam:Voorbeeld en Formulier frmSample . U kunt ze importeren in uw huidige database. Er is een ander formulier met de naam frmMenu daar in en u kunt de opdrachtknoppen kopiëren Alles uitvouwen, Alles samenvouwen, en hun Command Button Click Event Procedures van frmMenu naar de frmSample Codemodule om door te gaan met deze sessie.
Zoals ik eerder heb vermeld, kunnen we het ImageList-besturingselement delen met de geüploade afbeeldingen naar andere projecten, we zullen een kopie maken van het ImageList-besturingselement van de laatste zelfstudiesessie en het hier brengen, met alle geüploade afbeeldingen, en het gebruiken op de Tree View-besturingsknooppunten op frmSample .
ImageList-besturingselement importeren met afbeeldingen.
U kunt het ImageList-besturingselement dat u al heeft, met geüploade afbeeldingen in een andere database, op de volgende manieren binnenbrengen:
-
Importeer het formulier met het ImageList-besturingselement in de actieve database, vanuit de database waar u het ImageList-besturingselement hebt met handmatig geüploade afbeeldingen. Kopieer en plak het ImageList-besturingselement in het formulier, waar u het wilt hebben.
-
Of kopieer het ImageList-besturingselement naar het klembord, eerst vanuit de database, waar u het hebt. Als je de Demo Database van de eerdere Tutorial Sessie hebt gedownload, dan heb je al de ImageList Control met geüploade afbeeldingen. Sluit de database na het kopiëren van het ImageList-besturingselement naar het klembord.
-
Open de doeldatabase en open het formulier waar u het ImageList-besturingselement wilt hebben en plak het op het formulier.
Met de volgende coderegels in de CreateTreeView() Sub-Routine kunt u de ImageList Object Reference doorgeven aan de Tree View Control.
Tv dimmen als MSComctlLib.TreeViewDim ImgList As MSComctlLib.ImageListSet tv =Me.TreeView0 .Objecttv.Nodes.ClearSet ImgList =Me.ImageList0 .Objecttv.ImageList =ImgList
Wijzig de gemarkeerde objectnamen in de code, als ze anders zijn op het formulier.
Daarna kunt u de namen van de afbeeldingssleutels toevoegen aan de TreeView Nodes.Add() de laatste twee parameters van de methode.
Deze oefeningen hebben we al gedaan in de eerdere sessies. Om u eraan te herinneren dat we het besturingselement voor tabel- en boomweergave gebruiken dat we in de eerste zelfstudiesessie hebben gemaakt en geïmplementeerd met de hierboven uiteengezette wijzigingen.
De eigenschappenwaarden van de gemarkeerde knooppunten weergeven.
De geselecteerde Node Sleutel , Oudersleutel, en Tekst Eigenschappen worden weergegeven in de tekstvakken aan de rechterkant van het Tree View-besturingselement. Het Check-Box met het bijschrift:Child Node, de Verwijderen Knooppunt, en Knooppunt toevoegen Opdrachtknoppen zijn nieuwe toevoegingen aan het formulier. Hun functies zullen in een korte tijd worden uitgelegd.
CheckBoxen weergeven op het TreeView-besturingselement.
Normaal gesproken wordt het selectievakje niet weergegeven op het TreeView-besturingselement, tenzij we een eigenschap inschakelen in het eigenschappenblad van het TreeView-besturingselement. Het heeft hier slechts een beperkte functionaliteit. Wat we hier ook gaan doen, kan ook zonder het selectievakje.
Een betere benadering voor het gebruik van CheckBoxen kan zijn, zoals het opstellen van een rapport over geselecteerde filiaallocaties van de bedrijven van het bedrijf, gebaseerd op door de gebruiker te selecteren willekeurige keuzen van filialen, vanuit Access Project Menu.
Hier is het doel om bekendheid te geven aan deze functie en een demo te geven over het gebruik ervan.
- Open het formulier met het TreeView-besturingselement in de ontwerpweergave.
- Klik met de rechtermuisknop op het TreeView-besturingselement, markeer het TreeCtrl-object , selecteer de Eigenschappen optie om het eigenschappenblad weer te geven.
- Zet een vinkje op de CheckBoxen optie op het eigenschappenbesturingselement zoals weergegeven in de onderstaande afbeelding.
De demo TreeView-afbeelding bovenaan, Details.
Laten we eens kijken wat we hebben op het demoformulier frmSample bovenaan deze pagina gepresenteerd. Het Tree View-besturingselement en de bovenste twee opdrachtknoppen, Alles uitvouwen en Alles samenvouwen, op Klik vergroot of verkleint de knooppunten en we hebben hun functies in de laatste aflevering gezien.
Aan de rechterkant zijn er drie tekstvakken, onder de kop Label:Eigenschapswaarden , voor het weergeven van de aangevinkte Sleutel . van de Node , Oudersleutel, en Tekst Waarden.
Het Knooppunt verwijderen Opdrachtknop verwijdert het aangevinkte knooppunt of het knooppunt en zijn onderliggende knooppunten.
Voordat u de Knooppunt-opdrachtknop toevoegen . selecteert , de Tekst Eigenschapswaarde moet worden bewerkt om te vervangen door de nieuwe tekstwaarde voor het nieuwe knooppunt.
Boven de Node toevoegen Command-knop, er is een selectievakje met het label Child Node. De Node toevoegen en Child Node Check-Box werkt samen om de regel in te stellen, zoals waar de nieuwe Node moet verschijnen.
De actie Knooppunt toevoegen begrijpen.
Stel dat u een nieuw knooppunt voor Hyperlink . wilt toevoegen veld onder de Velden groep (of bovenliggende knooppunt) gegevenstype Lijst. Kijk naar de demo-afbeelding bovenaan deze pagina, waar ik het Datumveld heb aangevinkt Node, onder andere Child-Nodes. De eigenschappenbladen aan de rechterkant tonen de sleutel:X15 , ParentKey:X4 &Tekst:Datumveld Beschrijving.
Wijzig de tekst:Datumveld naar Hyperlink in het tekstvak van de eigenschapweergave en klik op Knooppunt toevoegen Command knop. De output zal zijn zoals hieronder getoond:
Als u de Velden aanvinkt parent Node item en plaats een vinkje in de Child-Node optie, boven de Node toevoegen Command-knop, je krijgt hetzelfde resultaat.
Als u in plaats daarvan het vinkje Node op het Datumveld laat staan, en zet het vinkje op de Child-Node optie boven de Node toevoegen Command-knop, je krijgt het resultaat zoals hieronder weergegeven.
De onderliggende node wordt gemaakt onder de aangevinkte node.
De acties Knooppunt toevoegen moeten eerst een nieuw record in de onderliggende tabel maken.
Er wordt een nieuw record gemaakt in het Voorbeeld Tabel, met de nieuwe tekst:HyperLink en Ouder-ID Waarden. Het veld AutoNummering genereert een nieuw nummer en we halen het op en gebruiken het als sleutelwaarde voor het knooppunt.
De Add Node sub-Routine VBA-code wordt hieronder gegeven:
Private Sub cmdAdd_Click()Dim strKey As StringDim lngKey As LongDim strParentKey As StringDim lngParentkey As LongDim strText As StringDim lngID As LongDim strIDKey As StringDim childflag As IntegerDim Com db As DAO.SaqabaseDimde As Integeri =0For Each tmpnode In tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True i =i + 1 End IfNextIf i> 1 Then MsgBox "Selected Nodes:" &i &vbCr &"Selecteer slechts één node om toevoeging te markeren .", vbCritical, "cmdAdd()" Exit SubEnd If'Read Property Values from FormstrKey =Trim(Me![TxtKey])lngKey =Val(Mid(strKey, 2))strParentKey =Trim(Me![TxtParent])lngParentkey =IIf(Len(strParentKey)> 0, Val(Mid(strParentKey, 2)), 0)strText =Trim(Me![Text])'Read child Node Option settingchildflag =Nz(Me.ChkChild.Value, 0)intflag =0strSql ="INSERT INTO Sample ([Desc], [ParentID] ) "If lngParentkey =0 And childflag =0 Then 'Voeg Root-level Node, ParentKey i toe s Leeg strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &" " strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =1ElseIf (lngParentkey>=0) And (childflag =True) Dan 'Voegt een onderliggende node in de gemarkeerde node in, hier Sleutelwaarde gebruikt als ParentKey strSql =strSql &"SELECT '" &strText &"' AS [Desc ], '" &lngKey strSql =strSql &"' AS ParentID VAN Voorbeeld WHERE ((Sample.ID =1));" intflag =2ElseIf (lngParentkey>=0) And (childflag =False) Dan 'Voegt Node in op het aangevinkte niveau, Voeg item toe onder dezelfde ParentKey strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &lngParentkey strSql =strSql &"' AS ParentID VAN Voorbeeld WHERE ((Sample.ID =1));" intflag =3End IfSet db =CurrentDbdb.Execute strSql'Get nieuw aangemaakte autonumber om te gebruiken als KeylngID =DMax("ID", "Sample")strIDKey =KeyPrfx &CStr(lngID)On Error GoTo IdxOutofBoundSelect Case intflag Case 1 'Voeg root toe- level Node, ParentKey is blanco tv.Nodes.Add , , strIDKey, strText, "folder_close", "folder_open" Case 2 'Voegt een onderliggende node toe aan de gemarkeerde node, hier Sleutelwaarde gebruikt als ParentKey tv.Nodes.Add strKey , tvwChild, strIDKey, strText, "left_arrow", "right_arrow" Case 3 'Voegt Node in op het gemarkeerde niveau, Voeg item toe onder dezelfde ParentKey tv.Nodes.Add strParentKey, tvwChild, strIDKey, strText, "left_arrow", " right_arrow"End Selecttv.Refresh 'Wis eigenschapswaarden van formulier met mij .TxtKey ="" .TxtParent ="" .Text ="" End WithSet db =NothingcmdExpand_Click cmdAdd_Click_Exit:Exit SubIdxOutofBound:Click CreateTreeView Subpresum_cmdAdd_Laten we de VBA-code eens bekijken. Na de lokale variabelendeclaraties worden de TreeView-knooppunten gescand op vinkjes en wordt een telling van de items met vinkjes uitgevoerd. Als de aangevinkte knooppunten meer dan één zijn, wordt er een bericht weergegeven en wordt het programma afgebroken.
Opmerking: In plaats van een vinkje te zetten, kunnen we direct op een knooppunt klikken om het te selecteren. In beide gevallen wordt de Checked/Clicked Node als parameter doorgegeven aan de Event Procedure. Vinkjes zijn handig wanneer u meer dan één item uit een projectmenu moet selecteren, bijvoorbeeld:voor de selectie van een andere set gegevens voor een bepaald rapport, enz.
De eigenschapswaarden van het aangevinkte knooppunt worden gelezen vanuit de formulierbesturingselementen in strKey , strParentKey, en strText. De ID, ParentID Numerieke waarden worden geëxtraheerd en opgeslagen in lngKey en lngParentKey Variabelen voor gebruik in SQL String.
Vervolgens de Child-Node Waarde van selectievakje wordt opgeslagen in ChildFlag Variabel.
Er worden drie verschillende sets SQL-strings gemaakt op basis van de geselecteerde Node en Child-Node Selectievakje boven de opdrachtknop Knooppunt toevoegen.
- Als Ouder-ID Eigenschapswaarde op het formulier is leeg en de Child Node niet is aangevinkt, wordt er een nieuw record op rootniveau gemaakt omdat de gebruiker een node op rootniveau heeft aangevinkt.
- Als Ouder-ID Eigenschapswaarde>=0 en Child Node selectievakje is geselecteerd (aangevinkt ) wordt er een nieuw record gemaakt als een onderliggend knooppunt voor het aangevinkte knooppunt. De aangevinkte Sleutel . van de Node (ID) wordt gebruikt als ParentID op de nieuwe Record voor de nieuwe Node.
- Als Ouder-ID Waarde >=0 en Child Node selectievakje optie niet geselecteerd (niet aangevinkt ) dan wordt het nieuwe record gemaakt voor het nieuwe knooppunt, op hetzelfde niveau als het aangevinkte knooppunt.
De intFlag Variabele wordt ingesteld met een van de drie waarden:1,2 of 3, afhankelijk van de uitvoering van SQL, als indicatie voor het type knooppunt dat moet worden gemaakt op het Tree View-besturingselement.
Vervolgens wordt op basis van de selectie van opties de SQL uitgevoerd om een nieuw record te maken op het Voorbeeld Tabel, met een nieuwe AutoNummering ID-veldwaarde.
Vervolgens de DMax() Functie retourneert de unieke record-ID als sleutelwaarde voor het nieuwe knooppunt.
Op basis van de optie Type knooppunt (1,2 of 3) wordt het knooppunt gemaakt op de Tree View Control.
De inhoud van het tekstvak van de eigenschapweergave wordt gewist.
Node of Node met kinderen verwijderen.
Het Verwijderknooppunt Optie is veel gemakkelijker dan de eerdere oefening. Verwijdert eenvoudig het aangevinkte knooppunt en zijn kinderen, indien aanwezig, uit het structuurweergave-besturingselement. De gerelateerde records worden ook uit de tabel verwijderd.
De VBA-code voor het verwijderen van knooppunten wordt hieronder gegeven:
Private Sub cmdDelete_Click()Dim nodId As Long, nodParent As LongDim strSql As StringDim db As DAO.DatabaseDim j As IntegerDim tmpnode As MSComctlLib.NodeDim strKey As StringDim strMsg Node check Each String-mark =0 ' tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True strKey =tmpnode.Key j =j + 1 End IfNext If j> 1 Then MsgBox "Selected Nodes:" &j &vbCr &"Select Only One Node to Delete." , vbCritical, "cmdDelete()" Exit Sub End IfSet tmpnode =tv.Nodes.Item(strKey)tmpnode.Selected =TrueSet db =CurrentDb'controleer de aanwezigheid van onderliggende node(s) van gemarkeerde NodeIf tmpnode.Children> 0 Then' Waarschuwingen:'Het willekeurig verwijderen van knooppunten laat verweesde knooppunten achter in de tabel en resulteert in fouten tijdens het volgende laadproces van Tree View strMsg ="The Marked Node have " &tmpnode.Children &" Children. " &vbCr &"Delete the Kindknooppunten ook?" Als MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Dan 'Dubbel controleren en bevestiging krijgen. strMsg ="Verwijder alleen de diepste set onderliggende knooppunten" &vbCr strMsg =strMsg &"en hun bovenliggende knooppunt tegelijk." &vbCr &vbCr strMsg =strMsg &"Weet u zeker dat u doorgaat..?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Dan Doen tot tmpnode.Children =0 nodId =Val(Mid(tmpnode.Child.Key, 2)) 'Verwijder onderliggende node tv.Nodes.Remove tmpnode .Child.Index 'Verwijder het gerelateerde record strSql ="DELETE Sample.*, Sample.ID FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql Loop Else Exit Sub End If Else Exit Sub End IfEnd If nodId =Val(Mid(tmpnode.Key, 2)) 'Delete Parent tv.Nodes.Remove tmpnode.Key tv.Refresh 'Delete Marked Record strSql =" DELETE Sample.*, Sample.ID VAN Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql 'Erase Property Values from Form With Me .TxtKey ="" .TxtParent ="" .Text ="" End With Set db =Nothing End SubNa de lokale variabele declaraties de For Each . . . Volgende Loop neemt een telling van Nodes met vinkjes. Als er meer dan één aangevinkt item is gevonden, wordt een bericht weergegeven en wordt het programma afgebroken.
Als er slechts één item is aangevinkt, zoekt de tweede stap Validatiecontrole naar de aanwezigheid van onderliggende node(s) van de geselecteerde node. Als er onderliggende nodes worden gevonden, wordt daarover een bericht weergegeven. De gebruiker moet zijn voornemen om door te gaan met het verwijderen van de onderliggende nodes en daarna de aangevinkte bovenliggende node opnieuw bevestigen.
Opmerking: Gebruikers wordt geadviseerd om eerst het diepste niveau van onderliggende knooppunten te verwijderen, of alle onderliggende knooppunten op het diepste niveau met hun directe bovenliggende knooppunt, door alleen het bovenliggende knooppunt te markeren, niet het grootouderknooppunt. Door de verwijderingsregel op dit niveau te beperken, blijft de Code eenvoudig en gemakkelijk te begrijpen. Als u deze regel overtreedt, kunnen sommige knooppunten verweesd blijven en kunnen er fouten optreden wanneer de structuurweergave de volgende keer wordt geopend .
De onderliggende knooppunten worden één voor één verwijderd en de bijbehorende records in de tabel worden ook één voor één verwijderd. Verwijdert vervolgens het gemarkeerde bovenliggende record.
Als het gemarkeerde knooppunt geen onderliggende knooppunt(en) heeft, wordt het onmiddellijk na de validatiecontroles verwijderd en wordt het bijbehorende tabelrecord ook verwijderd.
De inhoud van het tekstvak van de eigenschapweergave op het formulier is gewist.
De VBA-code van de Form frmSample's Complete Class Module.
Hieronder volgt de volledige VBA-code in frmSample 's Class Module, met andere kleine subroutines voor het uitbreiden van instortende Nodes, TreeView0_NodeCheck Gebeurtenisprocedure, cmdExit Command Button Klik Event, Form_Load() Procedures, en CreateTreeView() Subroutine:
Optie Vergelijk DatabaseOption ExplicitDim tv As MSComctlLib.TreeViewDim ImgList As MSComctlLib.ImageListConst KeyPrfx As String ="X"Private Sub cmdAdd_Click()Dim strKey As StringDim lngKey As LongDim strParentKey As StringDim lngstrID StringDim childflag As IntegerDim db As DAO.DatabaseDim strSql As StringDim intflag As IntegerDim tmpnode As MSComctlLib.NodeDim i As Integeri =0Voor elke tmpnode in tv.Nodes If iNext. 1 Dan MsgBox "Selected Nodes:" &i &vbCr &"Select only One Node to mark Addition.", vbCritical, "cmdAdd()" Exit SubEnd If'Read Property Values from FormstrKey =Trim(Me![TxtKey])lngKey =Val(Mid(strKey, 2))strParentKey =Trim(Me![TxtParent])lngParentkey =IIf(Len(strParentKey)> 0, Val(Mid(strParentKey, 2)), 0)strText =Trim(Me![ Tekst])'Lees child Node Option settingchildflag =Nz(Me.ChkChild.Value, 0)intflag =0strSql ="INSERT INTO Sample ([Desc], [ParentID] ) "If lngParentkey =0 And childflag =0 Then 'Voeg Root-level Node toe, ParentKey is leeg strSql =strSql &"SELECT '" &strText &"' AS [ Desc], '" &" " strSql =strSql &"' AS ParentID VAN Voorbeeld WHERE ((Sample.ID =1));" intflag =1ElseIf (lngParentkey>=0) And (childflag =True) Dan 'Voegt een onderliggende node in de gemarkeerde node in, hier Sleutelwaarde gebruikt als ParentKey strSql =strSql &"SELECT '" &strText &"' AS [Desc ], '" &lngKey strSql =strSql &"' AS ParentID VAN Voorbeeld WHERE ((Sample.ID =1));" intflag =2ElseIf (lngParentkey>=0) And (childflag =False) Dan 'Voegt Node in op het aangevinkte niveau, Voeg item toe onder dezelfde ParentKey strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &lngParentkey strSql =strSql &"' AS ParentID VAN Voorbeeld WHERE ((Sample.ID =1));" intflag =3End IfSet db =CurrentDbdb.Execute strSql'Get nieuw aangemaakte autonumber om te gebruiken als KeylngID =DMax("ID", "Sample")strIDKey =KeyPrfx &CStr(lngID)On Error GoTo IdxOutofBoundSelect Case intflag Case 1 'Voeg root toe- level Node, ParentKey is blanco tv.Nodes.Add , , strIDKey, strText, "folder_close", "folder_open" Case 2 'Voegt een onderliggende node toe aan de gemarkeerde node, hier Sleutelwaarde gebruikt als ParentKey tv.Nodes.Add strKey , tvwChild, strIDKey, strText, "left_arrow", "right_arrow" Case 3 'Voegt Node in op het gemarkeerde niveau, Voeg item toe onder dezelfde ParentKey tv.Nodes.Add strParentKey, tvwChild, strIDKey, strText, "left_arrow", " right_arrow"End Selecttv.Refresh 'Wis eigenschapswaarden van formulier met mij .TxtKey ="" .TxtParent ="" .Text ="" End WithSet db =NothingcmdExpand_Click cmdAdd_Click_Exit:Exit SubIdxOutofBound:Click CreateTreeView Subit_cmdAdd_Click CreateTreeView Subit_cmdAdd_Click Click() DoCmd.CloseEnd SubPrivate Sub cmdDelete_Click()Dim nodId As Long, nodParent As LongDim strSql As StringDim db As DAO.DatabaseDim j As IntegerDim tmpnode As MSComctlLib.NodeDim strKeysGet As String-mark =Elke tmpnode In tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True strKey =tmpnode.Key j =j + 1 End IfNext If j> 1 Then MsgBox "Selected Nodes:" &j &vbCr &"Select Only One Node to Delete.", vbCritical, "cmdDelete()" Exit Sub End IfSet tmpnode =tv.Nodes.Item(strKey)tmpnode.Selected =TrueSet db =CurrentDb'controleer de aanwezigheid van onderliggende node(s) van gemarkeerde NodeIf tmpnode.Children> 0 Dan'Waarschuwingen:' Het willekeurig verwijderen van knooppunten laat verweesde knooppunten achter in de tabel en resulteert in fouten tijdens het volgende laadproces van Tree View strMsg ="The Marked Node have " &tmpnode.Children &" Children. " &vbCr &"Ook de onderliggende knooppunten verwijderen?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Dan 'Dubbel controleren en bevestiging krijgen. strMsg ="Alleen de diepste set onderliggende knooppunten verwijderen" &vbCr strMsg =strMsg &"en hun bovenliggende node tegelijk." &vbCr &vbCr strMsg =strMsg &"Bent u zeker om door te gaan..?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Dan Doen tot tmpnode.Children =0 nodId =Val(Mid(tmpnode.Child.Key, 2)) 'Delete Child Node tv.Nodes.Remove tmpnode.Child.Index 'Verwijder de gerelateerde record strSql ="DELETE Sample.*, Sample.ID FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql Loop Else Exit Sub End If Else Exit Sub End IfEnd If nodId =Val(Mid(tmpnode.Key, 2 )) 'Verwijder ouder-tv.Nodes.Verwijder tmpnode.Key tv.Vernieuwen'Verwijder gemarkeerde opname d strSql ="VERWIJDER Sample.*, Sample.ID VAN Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql 'Wissen eigenschapswaarden van formulier met mij .TxtKey ="" . TxtParent ="" .Text ="" End With Set db =Nothing End SubPrivate Sub cmdExpand_Click()Dim nodExp As MSComctlLib.Node For Each nodExp In tv.Nodes nodExp.Expanded =True NextEnd SubPrivate Sub cmdCollapse_Click()Dim nodExp As MSComctlLib. Knooppunt voor elke nodExp in tv.Nodes nodExp.Expanded =False NextEnd SubPrivate Sub Form_Load() CreateTreeView cmdExpand_ClickEnd SubPrivate Sub CreateTreeView()Dim db As DatabaseDim eerst As MeTexetDim nodKey As StringDim ParentKeyt As StringDim strimstr. .Objecttv.Nodes.Clear'Pass ImageList controle verwijzing naar TreeView's ImageList Property.Set ImgList =Me.ImageList0.Objecttv.ImageList =ImgListstrSql ="SELECTEER ID, Desc, ParentID FROM Sample;"Set db =CurrentDbSet rst =db.OpenRecordset("sample", dbOpenTable)Do While Not rst.EOF And Not rst.BOF If Nz(rst!ParentID, "") ="" Dan nodKey =KeyPrfx &CStr(rst!ID) strText =rst!desc tv.Nodes.Add , , nodKey, strText, "folder_close", "folder_open" Else ParentKey =KeyPrfx &CStr(rst!ParentID) nodKey =CStr(rfx &rst!ID) strText =rst!desc tv.Nodes.Add ParentKey, tvwChild, nodKey, strText, "left_arrow", "right_arrow" End Ifrst.MoveNextLooprst.CloseOn Error GoTo 0Set rst =NothingSet db =NothingEnd SubPrivate NoCheck As Object) Dim xnode As MSComctlLib.NodeSet xnode =Node If xnode.Checked Then xnode.Selected =True With Me .TxtKey =xnode.Key If xnode.Text =xnode.FullPath Then .TxtParent ="" Else .TxtParent =xnode. Parent.Key End If .Text =xnode.Text End With Else xnode.Selected =False With Me .TxtKey ="" .TxtParent ="" .Text ="" End WithEnd IfEnd SubDe ontwerpweergave van het frmSample-formulier wordt hieronder weergegeven:
Uw opmerkingen, opmerkingen en suggesties zijn welkom.
De demodatabase is bijgevoegd om te downloaden.
WOORDENBOEKOBJECT
- Basisprincipes van woordenboekobjecten
- Basisprincipes van woordenboekobjecten-2
- Woordenboek-objectsleutels en items sorteren
- Records uit woordenboek weergeven
- Klasobjecten toevoegen als woordenboekitems
- Klasobject woordenboekitem bijwerken