sql >> Databáze >  >> RDS >> Access

Rozbalovací nabídka přístupu TreeView ImageCombo

Úvod.

V této relaci výukového programu TreeView Control se naučíme programovat ovládací prvek ImageComboBox. Vytvoříme rozbalovací nabídku projektu MS-Access s ovládáním ImageCombo. Existuje druhý ovládací prvek ImagecomboBox pro zobrazení obrázků a jejich klíčových hodnot z ImageList Řízení. Pro oba tyto ovládací prvky ImageComboBox byl seznam obrázků převzat ze společného ovládacího prvku ImageList. Obrázky byly ručně nahrány do ovládacího prvku ImageList z počítače v dřívější relaci této série výukových programů.

Následují výukové relace pro ovládání stromového zobrazení, kterými jsme se doposud zabývali:

Odkazy na relace výukového programu pro ovládání TreeView.

  1. Výukový program pro ovládání Microsoft TreeView
  2. Vytvoření přístupové nabídky pomocí TreeView Control
  3. Přiřazení obrázků k ovládacímu prvku TreeView
  4. Přiřazení obrázků k TreeView Control-2
  5. Ovládací prvek TreeView zaškrtněte políčko Přidat a odstranit uzly

Zobrazení ukázky obou ImageComboBoxů bylo rozbaleno.

Dokončený obrázek rozbalovací nabídky projektu MS-Access je uveden níže:

Obrázek zobrazení návrhu výše uvedeného formuláře:

Rozbalovací zdrojová data ImageComboBox.

Zdrojová data nového rozbalovacího menu projektu MS-Access byla převzata z našeho dřívějšího projektu Access Menu.

Stáhněte si demo databázi nyní, pokud jste tak neučinili dříve, ze 4. položky Odkaz uvedený výše. Pokud tak učiníte, máte všechny požadované datové objekty pro pokračování v aktuální relaci.

Existují tři tabulky:Kategorie, Produkty a Nabídka stůl. Existují dva formuláře pro zobrazení dat kategorií a produktů a parametr datového filtru Form for Report.

Máme další dva formuláře:frmMenu a frmMenu2 které jsme použili při našich dřívějších výukových relacích.

Najdete zde dvě sestavy pro náhled kategorií a datových položek produktů.

Dvě makra pro zobrazení některých jednoduchých zpráv. Makra lze použít pro sekvenování Action-Query pro zpracování dat pro komplikované Reporty. Tyto akce byly provedeny výběrem Options z TreeView Control Project Menu v dřívější relaci Tutorial.

Všechny tyto objekty zde potřebujeme také proto, že vytvoříme novou rozbalovací nabídku pomocí ImageComboBox Řízení. Musíme být schopni otevřít všechny tyto objekty výběrem možností v nové rozbalovací ovládací nabídce, přesně stejným způsobem jako v frmMenu2 Formulář pomocí ovládacího prvku TreeView ve stejné databázi.

Nabídka obrázek tabulky je uveden níže pro vaši informaci.

Příprava návrhu formuláře rozbalovací nabídky.

Podívejte se na návrhové zobrazení formuláře nabídky výše, v něm máme dva ovládací prvky související s nabídkou. Jeden ovládací prvek ImageList a jeden ovládací prvek ImageComboBox. Na pravou stranu formuláře byl umístěn další ovládací prvek ImageComboBox pro zobrazení ImageList obrázky.

  1. Vytvořte si kopii Seznamu obrázků Ovládání z frmMenu2 Formulář a vložte jej do nového formuláře, řekněte frmMenu3Combo .

    Tento ovládací prvek seznamu obrázků obsahuje obrázky, které jsme ručně nahráli z počítače v našem dřívějším kurzu. Můžete otevřít jeho list vlastností a zkontrolovat obrázky a jejich klíč Jména. Klepněte pravým tlačítkem myši na ovládací prvek ImageList a zvýrazněte Objekt ImageListCtl a vyberte možnost Vlastnosti.

  2. Ovládací prvek ImageComboBox umístěný na levé straně formuláře je pro rozbalovací nabídku s názvem:imgCombo1 . Najděte Microsoft ImageComboBox Control z Ovládacích prvků ActiveX skupinu a vložte ji do formuláře. Změňte název ovládacího prvku na imgCombo1 .

  3. Vytvořte další ovládací prvek ImageComboBox na pravé straně s názvem imgCombo2 . Druhý ImageComboBox, který použijeme pro zobrazení obrázků a jejich názvů klíčů, z ImageList0 Ovládání jako rozevírací seznam.

  4. Přidejte ovládací prvek Label nad druhý ovládací prvek ImageComboBox a změňte jeho titulek na Seznam obrázků.

Výpis obrázků v ovládacím prvku Image-Combo-Box.

Nejprve budeme pracovat s druhým imgCombo2 Ovládání a zobrazení seznamu obrázků z ovládacího prvku ImageList. Jakmile se seznámíte s kódem, velmi snadno pochopíte postup vytváření rozbalovací nabídky.

Rozdělili jsme frmMenu3Combo Formulářový modul VBA kód na dvě části. Vezměme si první část a podívejme se, co tam máme.

Stručně řečeno, v oblasti globální deklarace byly deklarovány hlavní proměnné objektu. Form_Load() událostní procedura inicializuje ovládací prvek ImageList ve formuláři do jeho objektové proměnné objimgList a volá cboImageList() podprogram pro přidání obrázků z ovládacího prvku ImageList do druhého ovládacího prvku ImageComboBox. Pojďme se na kód podívat blíže.

První část kódu vba s funkcí Form_Load() a cboImageList() podprogramy uvedené níže:

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

Recenze kódu VBA.

V oblasti globální deklarace jsme deklarovali dva ovládací prvky ImageComboBox, imgCombo1 pro nabídku projektu a imgCombo2 pro zobrazení obrázků ze Seznamu obrázků řízení. ObjimgList proměnná deklarovaná pro ovládací prvek ImageList ve formuláři. Keyprfx proměnná se znakem X deklarován jako konstanta.

V rámci Form_Load() procedura události objimgList je inicializován pomocí ovládacího prvku ImageList ve formuláři s příkazem:Set objimgList =Me.ImageList0.Object. Nyní jsou všechny předem načtené obrázky v ovládacím prvku ImageList dostupné pro přístup prostřednictvím objektu objimgList.

Další příkaz volá podprogram cboImageList() přidat všechny obrázky do ImgCombo1 ovládání.

Nabídka CreateMenu() volání podprogramu bylo prozatím komentováno.

V cboImageList() s ubroutine byly deklarovány dvě proměnné.

Dále příkaz Set imgCombo2 =Me.ImageCombo2.Object přiřadí druhý ImagecomboBox na formuláři objektové proměnné imgCombo2.

Stejně jako ovládací prvek TreeView imgCombo2Seznam obrázků vlastnost, abyste předali odkaz ovládacího prvku ImageList ovládacímu prvku ImageComboBox, abyste získali přístup k vlastnostem ImageList. Další příkaz:imgCombo2.ImageList =objimgList dělá to.

Dále Pro . . . Další Smyčka běží pro počet obrázků v ovládacím prvku ImageList.

Key- první položky ImageList Hodnota ('form_close') byla uložena do strText variabilní. Zde jsme vzali klíčovou hodnotu ovládacího prvku Seznam obrázků jako Text nebo jako popis obrázku ImageCombo, protože to je jediný dostupný text. Značka vlastnost je prázdná a při práci s rozevírací nabídkou máme pro tuto vlastnost další využití.

Další prohlášení je důležité, na které se musíme důkladně podívat, Přidat způsob ovládání ImageComboBox. Syntaxe příkazu je uvedena níže:

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

Všechny parametry Add() metoda jsou volitelné. Při našem prvním testovacím spuštění tohoto ovládacího prvku použijeme hodnoty pro [Text], [Obrázek], a [Odsazení] pouze. Po zobrazení výsledku prvního zkušebního běhu zobrazení seznamu obrázků nepoužijeme hodnotu parametru [Odsazení] u tohoto ovládacího prvku ImageCombo.

Poznámka:Mějte však na paměti, že budeme potřebovat Odsazení Hodnota vlastnosti pro rozevírací nabídku, aby položky nabídky vypadaly jako kořenový uzel a podřízený uzel v ovládacím prvku TreeView. Použijeme [Klíč] Parametr také (pro klíčové i textové parametry) pro přístup ke konkrétní položce nabídky Tag Hodnota majetku.

Seznam obrázků s rostoucím Odsazením Nastavení parametrů.

První testovací seznam obrázků v ImageCombo2 bude po použití přírůstkových hodnot pro odsazení vypadat jako obrázek uvedený níže.:

Účinek odsazení je zřejmý z výše uvedeného zkušebního obrázku. Každá položka byla přesunuta doprava, o jedno místo větší než předchozí. Tuto funkci můžeme využít k umístění položky nabídky projektu Nodes, aby vypadala jako kořenové a podřízené uzly.

Po strText hodnota (‚form_close‘) první proměnná j odkazuje na číslo indexu ImageList, parametr [SelImage], který jsme vynechali, a další hodnotu v j byla použita pro odsazení každé položky seznamu při umístění do seznamu ComboBox. Po prvním testovacím běhu a po zobrazení výsledku můžete odstranit všechny parametry za hodnotou indexu obrázku.

Další tvrzení:imgCombo2.ComboItems(1).Selected =True vybere první položku v ComboBoxu. Když vyberete položku z ovládacího prvku ImageCombo pomocí kódu Change() událost se spustí, ale není tomu tak, když vyberete položku přímo ve formuláři. Funkce Update() událost ignoruje ruční aktualizaci události a pokusí se vyvolat prostřednictvím kódu.

Uložte formulář frmMenu3Combo a otevřete jej v normálním zobrazení. Rozbalte druhý ovládací prvek ImageList ComboBox a zobrazte výsledek. Odstraňte čárky a proměnnou j na konci, za první proměnnou j, která je zachována pro indexové číslo ImageList.

Rozbalovací nabídka kódu VBA projektu.

Nyní přistoupíme k druhé části kódu vba modulu formuláře, abychom se naučili, jak vytvořit rozbalovací nabídku Access a jak otevřít přístupové formuláře, sestavy a makra výběrem ovládací položky ComboBox.

Druhá část kódu vba se skládá z CreateMenu() podprogram a ImageCombo1_Click() e postup odvzdušnění, je uveden níže:

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

Myslím, že než začnete s kódem vba, měli byste se podívat na obrázek tabulky (třetí obrázek nahoře na této stránce), pokud jste to neudělali v dřívější relaci vytváření nabídky Access Project Menu.

ID pole má jedinečnou hodnotu ID a je polem AutoNumber.

Druhé pole Popis má názvy skupin typů objektů (formuláře, sestavy a makra) a skutečné názvy objektů formuláře, sestavy a makra.

PID Hodnota pole (Parent ID) je prázdná pro názvy skupin objektů:Formuláře, sestavy a Makra . Tyto prázdné položky hodnoty PID umístíme na levou pozici v rozbalovací nabídce ImageComboBox s odsazením jednoho znaku a ostatní položky se posunou dopředu s mezerou čtyř znaků. S tímto umístěním položek budou vypadat jako uzly na kořenové a podřízené úrovni v ovládacím prvku TreeView, ale budou nám chybět spojující čáry stromu.

Zkontrolujte obrázek v ovládacím prvku vybrané položky ImageComboBox, obrázek je umístěn úplně vlevo. Položka skupiny na dalším řádku je umístěna za mezerou jednoho znaku na levé straně a další položky skupiny se také objevují na stejné pozici. Položky podřízených členů v každé skupině byly umístěny po čtyřech znakových mezerách.

Hodnota pole PID byla zkontrolována a pokud je nalezena prázdná, předpokládáme, že se jedná o název skupiny, jinak je to název přístupového objektu, který musíme otevřít, když na něj uživatel klikne, a umístit je jako podřízené členy skupiny. Skutečná hodnota klíče v poli PID zde není důležitá. V obou případech to tady potřebujeme. Pro tento účel však můžeme použít hodnotu pole typu.

Dále Typ pole obsahuje typ objektu Kód:1 – Název formuláře , 2 – Název přehledu, a 3 – Název makra . Následující tři pole:Formulář, Zpráva a Makro mají skutečné názvy objektů na základě jejich příslušných kódů v poli Typ. Pro přehlednost jsem použil tři různá pole, všechna lze umístit také do jednoho sloupce.

Typový kód a Název objektu pár (řekněme 2rptCategories ) se uloží do Tag ImageComboBoxu Vlastnost.

Podprogram CreateMenu().

Nyní ke kódu vba podprogramu CreateMenu().

Databáze a další proměnné byly deklarovány na začátku.

imgcombo1 objekt v ariable byl inicializován pomocí Me.ImageCombo1. Objekta na formuláři.

Dále imgCombo1.ImageList vlastnost byla načtena s objektem ImageList objimgList Reference , takže budeme mít přímý přístup k indexovému číslu a hodnotám klíče ImageList.

Dále Nabídka Sada záznamů tabulky je otevřena pomocí řetězce SQL.

Hodnota pole PID byla zkontrolována, pokud je prázdná pak je to název skupiny objektů, ID hodnota má předponu Constant X a je uložena v strKey variabilní. Pole Popis hodnota byla uložena do strText Proměnná.

Další příkaz volá metodu Add() ovládacího prvku ImageComboBox a první položka byla přidána do rozbalovací nabídky.

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

První hodnota parametru Indexové číslo byla vynechána, ale bude vytvořena automaticky. strKey proměnná se skládá z hodnoty pole ID 1 s prefixovou konstantou X (X1 ) jako Klíč parametr. strText obsahuje Popis hodnota pole. Další hodnota 1 je ImageList první obrázek (pár klíč–hodnota folder_close ) Hodnota indexu. Pokud dáváte přednost páru klíč–hodnota 'folder_close' v uvozovkách, můžete tak učinit. Další hodnota 2 je hodnota indexu druhého obrázku ('folder_open'), nebo můžete použít 'folder_open' v uvozovkách a poslední parametr 1 je pro odsazení.

Poznámka: Pro potvrzení pořadí obrázků v indexu v Seznamu obrázků Zkontrolujte pořadí zobrazení obrázků v ImageCombo2 Displej, který jsme vytvořili dříve. Hodnotu Index jsme mohli přidat před hodnotu klíče jednou mezerou, abychom toto číslo přidali také k hodnotě klíče, aby vypadala jako [image] 1 form_close. [obrázek] 2 form_open a tak dále . . . Toto nechám na vás jako cvičení pro sebe.

Dále, pokud je hodnota pole PID nenulová, pak skutečnou možností nabídky bude Přidat ed v části Jiné Doložka. Zde jsme přidali další položku ImageCombo jako dříve. Pro [Obrázek] a [SelImage] params jsme vzali hodnotu Indexu položky ImageList 4 a 5 . Hodnota parametru odsazení je 4 znakové mezery.

V Add() položky ImageCombo Metoda v části Jiné Klauzule, musíme uložit název přístupového objektu (frmData Entry) spolu s Typ Kód 1 v Tag (ImageCombo1.ComboItems.Item(strKey).Tag) Vlastnictví. Když uživatel vybere tuto položku z rozbalovací nabídky ComboBox, Click() událost se spustí, Tag Hodnota vlastnosti byla extrahována, typový kód byl zkontrolován, pokud je typový kód 1 (Form) a poté název-form ve Vlastnost značky (frmData Entry) je otevřen pomocí DoCmd.OpenForm Příkaz.

Tímto způsobem všechna Nabídka Záznamy tabulky byly přidány do ovládacího prvku Image ComboBox.

Výrok imgcombo1.ComboItems.Item(1).Selected =True vybere první položku jako výchozí položku v ovládacím prvku Image ComboBox. V tomto čase spuštění kódu se provede Change() událost se spustí, ale ne, když je položka vybrána kliknutím na ni ve formulářovém zobrazení.

Poznámka: Před otevřením formuláře pro zkušební běh rozbalovací nabídky prosím odeberte symbol komentáře z ‘CreateMenu telefonní linku v Form_Load() Postup události. Tento řádek jsme dočasně zakomentovali během zkušebních běhů zobrazení obrázků z ImageList Control v ImageCombo2 Control.

ImageCombo1_Click() Událost se spustí, když uživatel vybere položku z ovládacího prvku Image ComboBox. Značka vybrané položky Hodnota vlastnosti byla zkontrolována pro typový kód a název objektu a otevře ji pomocí Docmd.Objecttype ObjectName .

Demo databáze ProjectMenuV221.accdb ve formátu .zip níže pro stažení.

Stáhněte si ProjectMenuV221.zip

OBJEKT SLOVNÍKU

  1. Základy objektů slovníku
  2. Základy objektů slovníku-2
  3. Řazení klíčů a položek objektů slovníku
  4. Zobrazení záznamů ze slovníku
  5. Přidat objekty třídy jako položky slovníku
  6. Aktualizujte položku slovníku objektů třídy


  1. SQL Server Internals:Problematic Operators Pt. I – Skenování

  2. Jak zálohujete a obnovujete databázi jako kopii na stejném serveru?

  3. Vytvoření uživatele na MySQL

  4. ORA-01830:Obrázek formátu data končí před převodem celého vstupního řetězce / Vyberte součet v dotazu na datum