A. Úvod .
Microsoft Tree View Control je součástí Microsoft Windows Common Controls. Je to zajímavý objekt, který zobrazuje související data v hierarchii uzlů. Může zobrazit související data, jako jsou položky a podpoložky v seznamu indexů nebo seznam složek, jako je levý panel Průzkumníka Windows nebo seznam souvisejících položek v hierarchické struktuře se stromovými čarami, zaškrtávacími políčky a grafikou bitmapových obrázků. .
Zobrazení ListView a Seznam obrázků Ovládací prvky jsou součástí běžných ovládacích prvků systému Windows a budeme je používat spolu s ovládacím prvkem TreeView v aplikaci Microsoft Access.
Myslím, že byste se rádi podívali na nějaké ukázkové ukázkové obrázky TreeView Control, na jejichž vytvoření budeme v následujících týdnech pracovat.
B. Ukázkové ukázkové obrázky .
Uzly ve sbaleném stavu.
- Ukázkový ukázkový obrázek TreeView se všemi uzly ve sbalené podobě.
Uzly v rozšířeném zobrazení.
- Výše uvedené ovládací uzly TreeView v rozbaleném zobrazení.
S ikonami obrázků šipek.
- Ukázkový displej TreeView s ikonami obrázku se šipkou zobrazenými vlevo od textu každého uzlu.
Kořenové uzly mají obrázky složek ostatní s šipkou.
- Dále zobrazení stromu s propojenými daty v podformuláři. Uzly na kořenové úrovni mají dva obrazy. Folder-Closed Image se zobrazí v normálním režimu. Když uzel na kořenové úrovni obdrží kliknutí myší, zobrazí se obrázek Otevřít složku a zobrazí podřízené uzly v rozbalené podobě.
Související informace se zobrazí na podformuláři na základě výběru uzlu na kořenové úrovni.
Jedna z vybraných položek podřízeného uzlu zobrazuje jiný formulář (obvykle skrytý) se souvisejícími informacemi.
Ovládací prvky TreeView a ListView
- Na dalším obrázku formuláře jsou dva panely. Uzly související s položkami kategorie produktu jsou v ovládacím prvku TreeView na levém panelu. Když jedna z položek kategorie obdrží kliknutí na ovládací prvek TreeView, zobrazí se v ListView související položky produktu s množstvím a katalogovou cenou v samostatných sloupcích. Control, v pravém panelu.
C. Vytváření vzorových dat pro zkušební provoz.
Vyzkoušejte ovládací prvek TreeView s některými ukázkovými daty uvedenými níže, na základě prvních dvou obrázků zobrazených na začátku této stránky.
Výše uvedená ukázková datová tabulka má tři pole.
-
ID pole je pole AutoNumber s jedinečnými ID čísly. Typ AutoNumber je vybrán pro naše pohodlí. V obou případech by všechny záznamy v tabulce měly mít hodnotu jedinečného ID. Pokud je číselný, měl by být před přidáním do ovládacího prvku TreeView převeden na typ řetězce.
-
Druhé pole je Popis uzlu (Popis ). Řádky informací v tomto sloupci spolu logicky souvisí.
-
Třetí ParentID pole je číselný typ. Před použitím v ovládacím prvku TreeView by však měly být převedeny na typ řetězce.
Musíme vědět, jak spolu hodnoty popisného sloupce souvisí, na základě toho můžeme vytvořit vztah zadáním souvisejících hodnot do ParentID pole.
Například togické uspořádání vztahu mezi Autorem knih, Vydavateli knih, Knihkupectvími, kde jsou Knihy v prodeji, nebo jako Vztahy mezi členy rodokmenu.
Vztah mezi kategorií produktu, produkty, skladem, cenou atd. Všechny tyto informace se nemusí objevit pod jedním sloupcem v jedné tabulce. Mohou se objevit v různých sloupcích nebo také v různých tabulkách.
ParentID pole je velmi důležité v tom, že určuje hierarchické uspořádání uzlů. Pokud je pole ParentID prázdné, měl by tento záznam jít jako uzel na kořenové úrovni. Podřízený uzel by měl mít vždy své ParentID vyplněno s hodnotou ID rodičovských záznamů.
Uzel na kořenové úrovni může mít jeden nebo více podřízených uzlů, podřízený uzel může mít své vlastní podřízené uzly.
Výše uvedená data načteme do ovládacího prvku TreeView a uvidíme, jak to vypadá. Poté vyplníme ParentId pole se souvisejícím ID s změnit pohled, způsob, jakým jej chceme vidět v logickém pořadí.
D. Soubor knihovny Common Controls Library .
-
Nejprve však otevřete jednu ze svých databází nebo vytvořte novou.
-
Otevřete okno VBA (ALT+F11 ) a vyberte Reference… z Nástrojů Menu.
-
Vyhledejte soubor:Společné ovládací prvky systému Microsoft Windows v zobrazeném seznamu souborů a zaškrtnutím jej vyberte.
Pokud nemůžete soubor najít v seznamu, klikněte na Procházet... Tlačítko a najděte soubor:MSCOMLIB.OCX v adresáři systému Windows, pro verzi Windows 7 vyhledejte soubor v SysWOW64 složka. Klikněte na OK zavřete ovládací prvek seznamu souborů knihovny.
-
Vytvořte tabulku s následující strukturou:
-
Uložte tabulku s názvem Ukázka .
-
Vyplňte tabulku ukázkovými daty 12 záznamů, jak je znázorněno na obrázku výše.
E. Vytvoření ovládacího prvku TreeView ve formuláři
-
Vytvořte nový prázdný formulář.
-
Klikněte na Ovládací prvky Activex z Ovládacích prvků Skupina, najděte Ovládací prvek Microsoft TreeView poté jej vyberte.
-
Klikněte na OK k vložení ovládacího prvku TreeView do formuláře.
-
Přetažením ovládacího prvku dolů a doprava ponechte v horní a levé části ovládacího prvku TreeView určitý prostor. Přetáhněte úchyt pro změnu velikosti v pravém dolním rohu směrem k pravému a dolnímu rohu, abyste ovládací prvek zvětšili, jako je ukázkový obrázek níže.
-
Zobrazte seznam vlastností ovládacího prvku a změňte jeho Název Hodnota vlastnosti na TreeView0, jestli je to tam jinak.
-
Zobrazte okno pro úpravy formuláře VBA.
- Zkopírujte a vložte následující kód VBA do modulu a přepište tam existující řádky kódu:
Option Compare Database Option Explicit Dim tv As MSComctlLib.TreeView Const KeyPrfx As String = "X" Private Sub Form_Load() Dim db As Database Dim rst As Recordset Dim strSQL As String Dim nodKey As String Dim ParentKey As String Dim strText As String Set tv = Me.TreeView0.Object strSQL = "SELECT ID, Desc, ParentID FROM Sample;" Set db = CurrentDb Set rst = db.OpenRecordset(strSQL, dbOpenDynaset) Do While Not rst.EOF And Not rst.BOF If Nz(rst!ParentID, "") = "" Then nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc ‘Add the TreeView Root Level Nodes tv.Nodes.Add , , nodKey, strText Else ParentKey = KeyPrfx & CStr(rst!ParentID) nodKey = KeyPrfx & CStr(rst!ID) strText = rst!Desc ‘Add the Record as Child Node tv.Nodes.Add ParentKey, tvwChild, nodKey, strText End If rst.MoveNext Loop rst.Close Set rst = Nothing Set db = Nothing End Sub
-
Uložte formulář s názvem frmSample, ale nezavírejte okno VBA.
G. Kód VBA řádek po řádku.
F. Přístup ke kódu VBA.
Pojďme se rychle podívat na kód VBA a pochopit, co dělá.
V oblasti globální deklarace modulu formulářů proměnná tv deklarován jako StreeView Objekt. KeyPrfx deklarován jako Konstantní , s hodnotou typu řetězce „X“.
Uzel TreeView Klíč-hodnota musí být vždy typu String a v klíči uzlu musí být přítomen alespoň jeden nečíselný znak. Naše vzorové klíčové hodnoty tabulky jsou všechny v číselné podobě, můžeme je převést a přidat ke konstantní hodnotě „X “. Samotná číselná hodnota převedená na typ řetězce nebude přijata jako klíč uzlu.
Poznámka: Pokud Node-Key a Rodičovský klíč hodnoty jsou již v alfa nebo alfa-numerické podobě, pak otázka převodu nevyvstává. Všechny hodnoty Node-Key musí být jedinečné.
V Form_Load() Procedura události, objekty Database a Recordset jsou deklarovány. Jsou také deklarovány čtyři řetězcové proměnné.
Příkaz Set tv =Me.TreeView0.Object příkazu přiřadí TreeView0 Objekt na formuláři do proměnné objektu tv.
Příkaz OpenRecordset() otevře Ukázku Záznamy tabulky pomocí SQL strSQL.
Tlačítko Do zatímco… příkaz zajistí, že sada záznamů není prázdná, pokud je prázdná, ukončete smyčku a ukončete program.
Pokud existují záznamy, pak ParentId prvního záznamu pole je zkontrolováno na přítomnost nějaké hodnoty nebo ne.
Pokud je prázdný, jedná se o záznam pro uzel na kořenové úrovni ovládacího prvku TreeView položka. Uzel na kořenové úrovni potřebuje pouze jedinečný Key uzlu Hodnota, kterou již máme v ID Popis pole a položky Hodnota pole pro Text Argument.
Pokud ParentID pole má nějakou hodnotu, pak je záznam Child-Node (Child of Root-level Node nebo child of some upper level Child Node) objektu TreeView.
Další řádek vytvoří Klíč Hodnota argumentu v nodKey Řetězcová proměnná s ID pole Hodnota, převedeno na řetězec a přidáno ke konstantní předponě X, Node-Key se změní na X1 .
první!Desc hodnota pole přidaná k řetězcové proměnné strText, jednoduše pro přehlednost a zkrácení v Nodes.Add() ve výpisu parametrů metody, pokud je odkaz na pole velmi dlouhý, udrží to metodu Add() úhlednou a uklizenou.
Další spustitelný řádek:tv.Node.Add() volá metodu Add() TreeView.Nodes Objekt pro přidání uzlu do TreeView0 ovládací prvek na formuláři frmSample .
Syntaxe metody Add() je uveden níže pro referenci:
tv.Nodes.Add([Relative],[Relationship],[Key],[Text],[Image],[SelectedImage]) As Node
Všech šest parametrů funkce Add() metoda jsou volitelné. Pokud tuto metodu zavoláte bez jakýchkoli parametrů, pak je to prázdný Uzel na kořenové úrovni se přidá a v ovládacím prvku TreeView se jako indikátor zobrazí prázdný stromový řádek.
Pro TreeView Root Úroveň Uzel vyžaduje Klíč a Text Hodnoty argumentu.
Pro podřízené uzly oba [Relativní] a [Vztah] Jsou vyžadovány argumenty. Vynechání kteréhokoli z nich vloží uzel jako kořenový uzel, ale nezpůsobí žádnou chybu.
[Relativní] je NodKey existujícího uzlu, zapsaného do ParentID souvisejícího záznamu pole. [Vztah] je konstantní tvwChild s číselnou hodnotou 4, která jej identifikuje jako podřízený uzel Klíč- Hodnota v ParentID pole.
Druhý Konstantní hodnoty pro argument vztahu se používají k umístění podřízených uzlů do konkrétního umístění. Konstantní hodnoty jsou následující:
tvwFirst =0, umístí jej jako první uzel na úroveň relativního uzlu.
tvwLast =1, umístí se jako poslední uzel na úrovni relativního uzlu.
tvwNext =2, umístí uzel za určený uzel.
tvwPředchozí =3, umístí uzel bezprostředně před zadaný uzel.
Poznámka: Můžete experimentovat s nastavením jednotlivých hodnot ve vztahu Argumentujte a spusťte kód v režimu ladění po ponechání okna VBA a formuláře v normálním zobrazení vedle sebe. Sledujte, jak jsou uzly uspořádány v každém cyklu provádění kódu, abyste pochopili.
Ty budou užitečné při úpravě ovládacího prvku TreeView odstraněním položky a vložením jiné položky na její místo nebo přidáním nového uzlu na určité místo.
Před pokusem o přidání podřízeného uzlu do tohoto uzlu musí v kolekci uzlů existovat uzel s klíčem [Relative], jinak metoda Add() vygeneruje chybu.
Tento proces se opakuje, dokud nejsou zpracovány všechny záznamy v sadě záznamů.
Poznámka: Po spuštění ukázky si můžete kód VBA znovu prohlédnout.
H. První zkušební provoz.
Otevřete formulář v normálním zobrazení. Výsledek zkušebního běhu bude vypadat jako na obrázku níže.
Nevypadá víc než normální seznam. Nezapomeňte, že jsme v ParentID nevyplnili žádnou hodnotu pole v našem vzorku Stůl. Musíme vytvořit určitý vztah mezi položkami v řádcích záznamu, abychom je mohli přesunout a umístit v hierarchickém pořadí v ovládacím prvku TreeView.
I. Pochopení vztahu mezi záznamy.
- Otevřete Ukázkovou tabulku a pojďme prozkoumat Záznamy a jak spolu souvisí.
- Opusťte databázi položka samostatně jako kořenová položka.
Objekt databáze má také některé objekty nejvyšší úrovně:Aplikace, DBEngine, Kolekce pracovních prostorů a Kolekce databází , kterou jsme zde vynechali.
- Pak máme Tabulky seskupit položku s ID hodnota 2.
- Další tabulka , Pole, Pole položky souvisí s Tabulkami skupina. Chceme tabulku Pole a Pole položky k seřazení pod nadřazenou položku Tabulky Záznam skupiny s hodnotou ID 2.
- Nazvěme záznam Tabulky jako Rodičovský uzel Záznamy , Tabulka, Pole a pole jako Podřízené uzly .
J. Aktualizace pole ParentID.
- Musíme tedy aktualizovat hodnotu 2 (Klíč uzlu tabulek ) v parentID pole Tabulky , Pole, a Pole evidence.
- Aktualizujte prosím pouze tyto záznamy a zavřete tabulku. Po dokončení budou záznamy vypadat jako na obrázku níže:
-
Nyní otevřete frmSample ve formulářovém zobrazení a zkontrolujte ovládací prvek TreeView. Výsledek bude vypadat jako předchozí bez jakékoli změny. Změny již nastaly, ale nejsou pro vás viditelné.
K. List vlastností ovládacího prvku TreeView.
- Otočte frmSample v zobrazení Návrh.
- Klikněte pravým tlačítkem na ovládací prvek TreeView a zvýrazněte TreeCtrl_Object z místní nabídky a vyberte Vlastnosti .
List vlastností bude vypadat jako na obrázku níže:
- Změňte Styl čáry Vlastnost Hodnota =1 (tvwRootLines) a klikněte na Použít a poté klikněte na OK zavřete list vlastností.
L. Spustit po Stylu čáry Změna hodnoty vlastnosti
- Uložte formulář a otevřete jej v normálním zobrazení. Nyní se linie stromu zobrazují správně. Tabulky Uzel má plus (+ ) znak na levé straně označující, že tento uzel má jeden nebo více podřízených uzlů na další úrovni a ty nejsou v rozbalené formě.
- Kliknutím na symbol plus rozbalíte uzel a zobrazíte podřízené uzly se stejným ParentID. Když kliknete na symbol mínus, podřízené uzly se sbalí a skryjí, čímž se symbol opět změní na znaménko plus.
- Po rozbalení bude displej vypadat jako následující obrázek:
M. ParentID Aktualizace dalších záznamů.
Aktualizujeme Formuláře záznam ID Value (Node-Key Value) do Form, Controls, a Ovládání ParentID záznamů pole, takže tyto záznamy budou uvedeny v části Formuláře Uzel jako jeho Podřízené uzly .
Podobně aktualizujte pole ParentID v Přehled a Ovládací prvky záznamy s Přehledy ID (Hodnota klíče uzlu) Hodnota tak, aby Report a Ovládací prvky položky se umístí pod nadřazený uzel Přehledy , protože jde o Dětské uzly .
-
Proveďte změny ve vzorových záznamech tabulky s hodnotami ParentID, jak je uvedeno níže:
Po výše uvedených změnách bude zobrazení TreeView vypadat jako následující obrázek, když budou všechny uzly v rozbalené formě.
Všechny podřízené uzly související s uzly na kořenové úrovni:Tabulky, formuláře a sestavy jsou seskupeny jako seznam pod svými nadřazenými uzly. Ale podřízený uzel může mít nadřazený uzel, prarodičovský uzel nebo prarodičovský uzel.
N. Uspořádání všech objektů v logickém hierarchickém pořadí.
Vezměme si například první Tabulky uzlu na kořenové úrovni . Logicky Pole (se záznamem ID 5) přímo souvisí s Polemi kolekce (ID záznamu 4), Pole kolekce související s tabulkou a Tabulka je součástí Tabulek sbírka. Každá položka ve skupině (číslo záznamu 5 až 2) souvisí o jeden krok nahoru do další úrovně.
Umístíme tedy tyto podřízené uzly správně pod jejich vlastní nadřazený uzel a uvidíme, jak to vypadá.
-
Otevřete svou vzorovou tabulku a změňte hodnoty ParentID v tabulkách související s Child Records, jak je uvedeno níže:
- Pole Pole s Nadřazený prvek záznamu ID-5 je Fields, záznamu s ID-4, proto jsme pole ParentID 5. záznamu aktualizovali ID číslem 4.
- Podobně se pole ParentID 4. záznamu aktualizuje na 3 a ParentID 3. záznamu se aktualizuje na záznam číslo 2.
-
Poznámka: Nepředpokládejte, že položky uspořádané tímto způsobem musí být vedle sebe.
- Po změnách záznamů uložte tabulku a otevřete frmSample pro zobrazení změn. Vaše zobrazení TreeView by mělo vypadat jako na obrázku níže, se všemi uzly v rozbalené podobě.
Ovládací prvek TreeView má svůj vlastní list vlastností a nastavení ovlivňují jeho vzhled. Provedeme tedy změnu v jedné z jeho vlastností a vrátíme se a znovu zobrazíme TreeView.
Nastavení na tomto listu vlastností mění vzhled zobrazení TreeView.
Styl vlastnosti vlevo nahoře je již nastaven s maximálním počtem dostupných funkcí Možnost-7 (tvwTreeLinesPlusMinusPictureText).
Podřízeným uzlem uzlu kořenové úrovně může být nadřazený uzel svého vlastního potomka nebo potomků. Tímto způsobem může jít o několik kroků po stromě.
Změňte další dvě skupiny ParentID podřízeného uzlu hodnoty polí, aby vypadaly jako na obrázku výše.
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