Úvod.
V této epizodě výukového programu pro ovládání stromového zobrazení se naučíme, jak Přidat/Odstranit Uzly. Pozice položky Přidat/Odstranit kandidáta bude zaškrtnuta, kam chceme Přidat() nový uzel nebo Remove() označený uzel. Přidání uzlu může být na stejné úrovni jako označený uzel nebo jako podřízený uzel.
Dosavadní relace výukového programu pro ovládání TreeView.
- Výukový program pro ovládání Microsoft TreeView
- Vytvoření přístupové nabídky pomocí TreeView Control
- Přiřazení obrázků k ovládacímu prvku TreeView
- Přiřazení obrázků k TreeView Control-2
Normální zobrazení ovládacího prvku ukázkového stromu ve formuláři MS-Access s dalšími ovládacími prvky je uvedeno níže.
Tabulka dat pro ukázku TreeView Control.
Tabulka s názvem Ukázka které jsme použili v prvním tutoriálu, použijeme i zde. Je to malá tabulka se záznamy databáze Access, tabulka, struktura ovládacích prvků formulářů a sestav, uspořádaná v hierarchickém pořadí a snadno pochopitelná.
ID (Klíč ve stromovém zobrazení ) je pole automatického čísla.
Noví návštěvníci získají aktualizace pro tuto relaci s výukovým programem.
Pokud jste neprošli první výukovou relací, můžete si stáhnout ukázkovou databázi z druhé stránky relace:Vytvoření přístupové nabídky s ovládáním stromového zobrazení. V této databázi je tabulka s názvem:Ukázka a formulář frmSample . Můžete je importovat do vaší aktuální databáze. Existuje další formulář s názvem frmMenu tam a můžete zkopírovat příkazová tlačítka Rozbalit vše Sbalit vše a jejich Příkazové tlačítko Click Event Procedures z frmMenu do frmSample Modul kódu pro pokračování v této relaci.
Jak jsem již uvedl dříve, můžeme sdílet ovládací prvek ImageList s nahranými obrázky do jiných projektů, vytvoříme kopii ovládacího prvku ImageList z posledního výukového sezení a přeneseme jej sem se všemi nahranými obrázky a použijeme jej na Ovládací uzly stromového zobrazení na frmSample .
Import ovládacího prvku ImageList s obrázky.
Ovládací prvek seznamu obrázků, který již máte, můžete s nahranými obrázky v jiné databázi přenést následujícími způsoby:
-
Importujte formulář s ovládacím prvkem ImageList do aktivní databáze z databáze, kde máte ovládací prvek ImageList s ručně nahranými obrázky. Zkopírujte a vložte ovládací prvek ImageList do formuláře, kam chcete.
-
Nebo nejprve zkopírujte ovládací prvek ImageList do schránky z databáze, kde jej máte. Pokud jste si stáhli ukázkovou databázi z dřívějšího kurzu, pak již máte ovládací prvek ImageList s nahranými obrázky. Po zkopírování ovládacího prvku ImageList do schránky zavřete databázi.
-
Otevřete cílovou databázi a otevřete formulář tam, kde chcete ovládací prvek ImageList, a vložte jej do formuláře.
Pomocí následujících řádků kódu v CreateTreeView() Sub-Routine můžete předat ImageList Object Reference do stromového zobrazení.
Dim tv As MSComctlLib.TreeViewDim ImgList As MSComctlLib.ImageListSet tv =Me.TreeView0 .Objecttv.Nodes.ClearSet ImgList =Me.ImageList0 .Objecttv.ImageList =ImgList
Změňte zvýrazněné názvy objektů v kódu, pokud se ve formuláři liší.
Poté můžete přidat názvy obrazových klíčů do TreeView Nodes.Add() poslední dva parametry metody.
Tato cvičení jsme již provedli v předchozích lekcích. Abychom vám připomněli, že používáme ovládací prvek Table and Tree View, který jsme vytvořili v první lekci kurzu a implementovali s výše vysvětlenými změnami.
Zobrazení hodnot vlastností zaškrtnutých uzlů.
Vybraný Klíč uzlu , Rodičovský klíč, a Text Vlastnosti se zobrazují v textových polích na pravé straně ovládacího prvku stromového zobrazení. Zaškrtávací políčko s titulkem:Child Node, Smazat Uzel a Přidat uzel Příkazová tlačítka jsou nové doplňky formuláře. Jejich funkce budou vysvětleny za chvíli.
Zobrazení zaškrtávacích políček v ovládacím prvku TreeView.
Normálně se zaškrtávací políčko nezobrazuje na ovládacím prvku TreeView, pokud nepovolíme vlastnost v listu vlastností ovládacího prvku stromového zobrazení. Zde má pouze některé omezené funkce. Cokoli zde budeme dělat, lze provést i bez zaškrtávacího políčka.
Lepším přístupem k využití CheckBoxů může být příprava Reportu o vybraných pobočkách Podniků Společnosti na základě uživatelsky volitelných náhodných výběrů poboček z Access Project Menu.
Zde je cílem upozornit na tuto funkci a spustit ukázku jejího použití.
- Otevřete formulář pomocí ovládacího prvku TreeView v návrhovém zobrazení.
- Klikněte pravým tlačítkem na ovládací prvek TreeView, zvýrazněte Objekt TreeCtrl , vyberte Vlastnosti možnost zobrazení listu vlastností.
- Zaškrtněte Zaškrtávací políčka možnost na ovládacím prvku Vlastnosti, jak je znázorněno na obrázku níže.
Ukázkový obrázek stromu zobrazený nahoře, Podrobnosti.
Podívejme se, co máme na ukázkovém formuláři frmSample uvedeno v horní části této stránky. Ovládací prvek stromového zobrazení a dvě horní příkazová tlačítka Rozbalit vše a Sbalit vše, klikněte na tlačítko Rozbalí nebo sbalí uzly a jejich funkce jsme viděli v minulé epizodě.
Na pravé straně jsou tři textová pole pod nadpisem Štítek:Hodnoty vlastností , pro zobrazení zaškrtnutého Klíče uzlu , ParentKey, a Text Hodnoty.
Odstranění uzlu Příkazové tlačítko odstraní zaškrtnutý uzel nebo uzel a jeho podřízené uzly.
Před výběrem Příkazového tlačítka Přidat uzel , Text Hodnota vlastnosti musí být upravena a nahrazena novou textovou hodnotou pro nový uzel.
Nad Přidat uzel Příkazové tlačítko, je zde zaškrtávací políčko se štítkem Dětský uzel. Přidat uzel a Podřízený uzel Zaškrtávací políčko spolupracují na nastavení pravidla, kde se má nový uzel objevit.
Vysvětlení akce Přidat uzel.
Předpokládejme, že chcete přidat nový uzel pro hypertextový odkaz pole pod Pole skupina (nebo nadřazený uzel) datový typ Seznam. Podívejte se na ukázkový obrázek v horní části této stránky, kde jsem zaškrtl Pole Datum Node, mimo jiné Child-Nodes. Na pravé straně listů vlastností je zobrazen klíč:X15 , ParentKey:X4 &Text:Datumové pole Popis.
Změňte text:Pole data na Hypertextový odkaz v textovém poli zobrazení vlastností a klikněte na Přidat uzel Příkazové tlačítko. Výstup bude vypadat následovně:
Pokud zaškrtnete políčko Pole nadřazený uzel a zaškrtněte Child-Node nad možností Přidat uzel Příkazové tlačítko, získáte stejný výsledek.
Místo toho, pokud ponecháte zaškrtávací značku Uzel v Pole Datum a zaškrtněte Child-Node možnost nad Přidat uzel Příkazové tlačítko, dostanete výsledek, jak je znázorněno níže.
Podřízený uzel bude vytvořen pod zaškrtnutým uzlem.
Akce Add Node musí nejprve vytvořit nový záznam v podkladové tabulce.
V Ukázce se vytvoří nový záznam Tabulka s novým textem:Hyperodkaz a ParentID Hodnoty. Pole AutoNumber vygeneruje nové číslo a my ho načteme a použijeme jako klíč-hodnotu pro uzel.
Kód VBA podprogramu Přidat uzel je uveden níže:
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 Integer MSDim lngKey as Integer MSDimger inDimde strParentKey as DAOlde As Integeri =0For Every tmpnode In tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True i =i + 1 End IfNextIf i> 1 Then MsgBox "Vybrané uzly:" &i &vbCr &"Vyberte pouze jeden uzel pro označení přidání .", 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])'Nastavení možnosti čtení podřízeného uzluchildflag =Nz(Me.ChkChild.Value, 0)intflag =0strSql ="INSERT INTO Sample ([Desc], [ParentID] ) "Pokud lngParentkey =0 a childflag =0, pak 'Přidat uzel na kořenové úrovni, ParentKey i s Prázdný strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &" " strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =1ElseIf (lngParentkey>=0) And (childflag =True) Potom 'Vloží podřízený uzel do uzlu označeného zaškrtnutím, zde Hodnota klíče použitá jako ParentKey strSql =strSql &"SELECT '" &strText &"' AS [Desc ], '" &lngKey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =2ElseIf (lngParentkey>=0) And (childflag =False) Potom 'Vloží uzel na zaškrtnuté úrovni, Přidat položku pod stejný ParentKey strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &lngParentkey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =3End IfSet db =CurrentDbdb.Execute strSql'Získat nově vytvořené automatické číslo pro použití jako KeylngID =DMax("ID", "Sample")strIDKey =KeyPrfx &CStr(lngID)On Error Přejít na IdxOutof RoBoundSelect Case 1-Ad Case intflag uzel úrovně, ParentKey je Prázdný tv.Nodes.Add , , strIDKey, strText, "folder_close", "folder_open" Případ 2 'Vloží podřízený uzel do uzlu označeného zaškrtnutím, zde Hodnota klíče použitá jako ParentKey tv.Nodes.Add strKey , tvwChild, strIDKey, strText, "left_arrow", "right_arrow" Případ 3 'Vloží uzel na zaškrtnuté úrovni, Přidat položku pod stejný ParentKey tv.Nodes.Add strParentKey, tvwChild, strIDKey, strText, "left_arrow", " right_arrow"End Selecttv.Refresh 'Vymazat hodnoty vlastností z formuláře With Me .TxtKey ="" .TxtParent ="" .Text ="" End WithSet db =NothingcmdExpand_Click cmdAdd_Click_Exit:Exit SubIdxOutofBound:CreateTred_Sublick_CPodívejme se na kód VBA. Po místních deklaracích proměnných jsou uzly TreeView prohledány na zaškrtnutí a provede se počet zaškrtnutých položek. Pokud je zaškrtnutých uzlů více než jeden, zobrazí se zpráva a program se přeruší.
Poznámka: Místo zaškrtnutí můžeme přímo kliknout na uzel a vybrat jej. V obou případech je Checked/Clicked Node předán jako parametr do Event Procedure,. Zaškrtnutí je dobré, když potřebujete vybrat více než jednu položku z nabídky projektu, například:pro výběr jiné sady dat pro konkrétní sestavu atd.
Hodnoty vlastností zaškrtnutého uzlu se načtou z ovládacích prvků formuláře do strKey , strParentKey, a strText. ID a číselné hodnoty ParentID jsou extrahovány a uloženy v lngKey a lngParentKey Proměnné pro použití v SQL String.
Dále Child-Node Hodnota zaškrtávacího políčka je uložena v ChildFlag Proměnná.
Na základě vybraného uzlu a podřízeného uzlu jsou vytvořeny tři různé sady řetězců SQL Zaškrtávací políčko nad příkazovým tlačítkem Přidat uzel.
- Pokud ParentID Hodnota vlastnosti ve formuláři je prázdná a Podřízený uzel zaškrtávací políčko není zaškrtnuto, bude vytvořen nový záznam na kořenové úrovni, protože uživatel zaškrtl uzel na kořenové úrovni.
- Pokud ParentID Hodnota vlastnosti>=0 a Podřízený uzel je zaškrtnuto políčko (zaškrtnuto ), pak se vytvoří nový záznam jako podřízený uzel k zaškrtnutému uzlu. Klíč uzlu zaškrtnutý (ID) se používá jako ParentID v novém záznamu pro nový uzel.
- Pokud ParentID Hodnota >=0 a Podřízený uzel možnost zaškrtávacího políčka není vybrána (nezaškrtnuto ), poté se pro nový uzel vytvoří nový záznam na stejné úrovni jako zaškrtnutý uzel.
intFlag Proměnná je nastavena na jednu ze tří hodnot:1, 2 nebo 3, v závislosti na provádění SQL, jako indikaci pro typ uzlu, který se má vytvořit v ovládacím prvku stromového zobrazení.
Dále se na základě výběru možností provede SQL k vytvoření nového záznamu na vzorku Tabulka s novou hodnotou pole AutoNumber ID.
Dále DMax() Funkce vrací Unique Record ID jako klíč-hodnotu pro nový uzel.
Na základě možnosti Typ uzlu (1, 2 nebo 3) se v ovládacím prvku stromového zobrazení vytvoří uzel.
Obsah textového pole zobrazení vlastností je vymazán.
Odstranění uzlu nebo uzlu s dětmi.
Odstranit uzel Možnost je mnohem jednodušší než předchozí cvičení. Jednoduše odstraní zaškrtnutý uzel a jeho potomky, pokud existují, z ovládacího prvku stromového zobrazení. Související záznamy jsou také odstraněny z tabulky.
Kód VBA pro odstranění uzlu je uveden níže:
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 As'Stringno get-in count-For tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True strKey =tmpnode.Key j =j + 1 End IfNext If j> 1 Then MsgBox "Vybrané uzly:" &j &vbCr &"Vybrat pouze jeden uzel k odstranění." , vbCritical, "cmdDelete()" Exit Sub End IfSet tmpnode =tv.Nodes.Item(strKey)tmpnode.Selected =TrueSet db =CurrentDb'zkontrolovat přítomnost podřízených uzlů označeného NodeIf tmpnode.Children> 0 Then' Upozornění:' Náhodné vymazání uzlů zanechá v tabulce osiřelé uzly a skončí s chybami během dalšího procesu načítání stromového zobrazení strMsg ="Označený uzel má " &tmpnode.Children &" Children." &vbCr &"Odstranit Také dětské uzly?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Then 'Dvakrát zkontrolujte a získejte potvrzení. strMsg ="Odstranit pouze nejhlubší sadu podřízených uzlů" &vbCr strMsg =strMsg &"a jejich nadřazený uzel najednou." &vbCr &vbCr strMsg =strMsg &"Opravdu pokračovat...?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Then Do Until tmpnode.Children =0 nodId =Val(Mid(tmpnode.Child.Key, 2)) 'Delete Child Node tv.Nodes.Remove tmpno .Child.Index 'Smazat související záznam strSql ="DELETE Sample.*, Sample.ID FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql Loop Else Konec 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 FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql 'Erase Property Values from Form With Me .TxtKey ="" .TxtParent ="" .Text ="" End With Set db =Nothing End SubPo místních deklaracích proměnných se zobrazí For Each . . . Další Loop spočítá počet uzlů se zaškrtnutím. Pokud je nalezeno více než jedna zaškrtnutá položka, zobrazí se zpráva a program se přeruší.
Pokud je zaškrtnuta pouze jedna položka, pak druhý krok Kontrola ověření hledá přítomnost podřízených uzlů vybraného uzlu. Pokud jsou nalezeny podřízené uzly, zobrazí se zpráva o tomto efektu. Uživatel musí znovu potvrdit svůj záměr přistoupit k odstranění nejprve podřízených uzlů a poté zaškrtnutého nadřazeného uzlu.
Poznámka: Uživatelům se doporučuje odstranit nejprve nejhlubší úroveň podřízených uzlů nebo všechny podřízené uzly nejhlubší úrovně s jejich bezprostředním nadřazeným uzlem, a to tak, že označí pouze nadřazený uzel, nikoli nadřazený uzel. Omezením pravidla mazání na této úrovni bude kód jednoduchý a srozumitelný. Porušení tohoto pravidla může ponechat některé uzly osiřelé a skončit s chybami při příštím otevření stromového zobrazení .
Podřízené uzly jsou odstraněny jeden po druhém a odpovídající záznamy v tabulce jsou také odstraněny, jeden po druhém. Poté smaže označený rodičovský záznam.
Pokud označený uzel nemá žádné podřízené uzly, je ihned po ověření platnosti odstraněn a odpovídající záznam tabulky je také smazán.
Obsah textového pole zobrazení vlastností ve formuláři je vymazán.
Kód VBA pro úplný modul třídy Formulář frmSample.
Následuje úplný kód VBA v frmSample Class Module s dalšími malými podprogramy pro rozšiřování sbalených uzlů, TreeView0_NodeCheck Procedura události, cmdExit Příkazové tlačítko Klepněte na událost, Form_Load() Postupy a CreateTreeView() Podprogram:
Option Compare DatabaseOption ExplicitDim tv As MSComctlLib.TreeViewDim ImgList As MSComctlLib.ImageListConst KeyPrfx As String ="X"Private Sub cmdAdd_Click()Dim strKey As StringDim lngKey As StringDim lngKey KlongkeyDim As StringDim StringDim childflag As IntegerDim db As DAO.DatabaseDim strSql As StringDim intflag As IntegerDim tmpnode As MSComctlLib.NodeDim i As Integeri =0Pro každý tmpnode In tv.Nodes If tmpnode.Checked Potom iSelx tmpno 1 Potom MsgBox "Vybrané uzly:" &i &vbCr &"Vyberte pouze jeden uzel pro označení přidání.", vbCritical, "cmdAdd()" Ukončete SubEnd If'Read Property Values from FormstrKey =Trim(Me![TxtKey])lngKey =Val(Mid(strParentKey, 2))strParentKey =Trim(Me![TxtParent])lngParentkey =IIf(Len(strParentKey)> 0, Val(Mid(strParentKey, 2)), 0)strText =Trim(Me![ Text])'Nastavení možnosti čtení podřízeného uzluchildflag =Nz(Me.ChkChild.Value, 0)intflag =0strSql ="INSERT INTO Sample ([Desc], [ParentID] ) "If lngParentkey =0 And childflag =0 Then 'Add Root-level Node, ParentKey is Blank' strSql =strSql &"SELECT '" &strText &"' AS [ Desc], '" &" " strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =1ElseIf (lngParentkey>=0) And (childflag =True) Potom 'Vloží podřízený uzel do uzlu označeného zaškrtnutím, zde Hodnota klíče použitá jako ParentKey strSql =strSql &"SELECT '" &strText &"' AS [Desc ], '" &lngKey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =2ElseIf (lngParentkey>=0) And (childflag =False) Potom 'Vloží uzel na zaškrtnuté úrovni, Přidat položku pod stejný ParentKey strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &lngParentkey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =3End IfSet db =CurrentDbdb.Execute strSql'Získat nově vytvořené automatické číslo pro použití jako KeylngID =DMax("ID", "Sample")strIDKey =KeyPrfx &CStr(lngID)On Error Přejít na IdxOutof RoBoundSelect Case 1-Ad Case intflag uzel úrovně, ParentKey je Prázdný tv.Nodes.Add , , strIDKey, strText, "folder_close", "folder_open" Případ 2 'Vloží podřízený uzel do uzlu označeného zaškrtnutím, zde Hodnota klíče použitá jako ParentKey tv.Nodes.Add strKey , tvwChild, strIDKey, strText, "left_arrow", "right_arrow" Případ 3 'Vloží uzel na zaškrtnuté úrovni, Přidat položku pod stejný ParentKey tv.Nodes.Add strParentKey, tvwChild, strIDKey, strText, "left_arrow", " right_arrow"End Selecttv.Refresh 'Vymazat hodnoty vlastností z formuláře se mnou .TxtKey ="" .TxtParent ="" .Text ="" End WithSet db =NothingcmdExpand_Click cmdAdd_Click_Exit:Exit SubIdxOutofBound:cmClmeEnosedPrivat_ClickReed 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 strKey Get-marks As StringDim string' Každý tmpnode V 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 &"To Select Only One Node" Delete.", vbCritical, "cmdDelete()" Exit Sub End IfSet tmpnode =tv.Nodes.Item(strKey)tmpnode.Selected =TrueSet db =CurrentDb'kontrola přítomnosti podřízených uzlů označeného NodeIf tmpnode.Children> 0 Then'Warnings:' Odstranění uzlů náhodně zanechá osiřelé uzly' v tabulce a skončí s chybami během dalšího procesu načítání stromového zobrazení strMsg ="Označený uzel má " &tmpnode.Children &" Children. " &vbCr &"Vymazat také podřízené uzly?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Then 'Dvakrát zkontrolujte a získejte potvrzení. strMsg ="Smazat pouze nejhlubší sadu podřízených uzlů" &vbCr strMsg =strMsg &"a jejich nadřazený uzel současně." &vbCr &vbCr strMsg =strMsg &"Opravdu pokračovat...?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Pak Udělejte, dokud tmpnode.Children =0 nodId =Val(Mid(tmpnode.Child.Key, 2)) 'Odstranit podřízený uzel tv.Nodes.Remove tmpnode.Child.Index 'Odstranit související záznam strSql ="DELETE Sample.*, Sample.ID FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql Loop Else Konec 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 Recor d strSql ="DELETE Sample.*, Sample.ID FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql 'Erase Property Values from Form With Me .TxtKey ="" . TxtParent ="" .Text ="" End With Set db =Nic End SubPrivate Sub cmdExpand_Click()Dim nodExp As MSComctlLib.Node Pro každý nodExp v tv.Nodes nodExp.Expanded =True NextEnd SubPrivate Sub cmdCollapse_Click()Dim nodExp As MSCom Uzel pro každý nodExp v tv.Nodes nodExp.Expanded =False NextEnd SubPrivate Sub Form_Load() CreateTreeView cmdExpand_ClickEnd SubPrivate Sub CreateTreeView()Dim db As DatabaseDim rst As RecordsetDim nodKey As StringDim ParentKey StrTextS StringS StringDim Me streView StringDim =Tre .Objecttv.Nodes.Clear'Pass ImageList ovládací odkaz na vlastnost ImageList v TreeView.Set ImgList =Me.ImageList0.Objecttv.ImageList =ImgListstrSql ="SELECT ID, Desc, ParentID FROM Sample;"Set db =CurrentDbSet rst =db.OpenRecordset("sample", dbOpenTable)Do While Not rst.EOF And Ne rst.BOF If Nz(rst!ParentID, "") ="" Then nodKey =KeyPrfx &CStr(rst!ID) strText =rst!desc tv.Nodes.Add , , nodKey, strText, "folder_close", "folder_open" Jinak ParentKey =KeyPrfx &CStr(rst!ParentID) nodKey =KeyPrfx &CStr( rst!ID) strText =rst!desc tv.Nodes.Add ParentKey, tvwChild, nodKey, strText, "left_arrow", "right_arrow" End Ifrst.MoveNextLooprst.CloseOn Error Přejít na 0Set rst =NothingSet db =NothingEnd SubPrivate Node Sub TreeView 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 xnode.Tx Parent.Key End If .Text =xnode.Text End With Else xnode.Selected =False With Me .TxtKey ="" .TxtParent ="" .Text ="" End WithEnd IfEnd SubNávrhové zobrazení formuláře frmSample je uvedeno níže:
Vaše postřehy, komentáře, návrhy jsou vítány.
Demo databáze je přiložena ke stažení.
OBJEKT SLOVNÍKU
- Základy objektů slovníku
- Základy objektů slovníku-2
- Řazení klíčů a položek objektů slovníku
- Zobrazení záznamů ze slovníku
- Přidat objekty třídy jako položky slovníku
- Aktualizujte položku slovníku objektů třídy