Access
 sql >> Teknologi Basis Data >  >> RDS >> Access

Menu Akses Drop-Down TreeView ImageCombo

Pengantar.

Dalam Sesi Tutorial Kontrol TreeView ini, kita akan belajar memprogram Kontrol ImageComboBox. Kami akan membuat Menu Drop-down Proyek MS-Access, dengan Kontrol ImageCombo. Ada Kontrol ImagecomboBox kedua untuk menampilkan Gambar dan Nilai Kuncinya dari ImageList Kontrol. Untuk kedua Kontrol ImageComboBox ini, daftar Gambar telah diambil dari Kontrol ImageList yang umum. Gambar diunggah secara manual ke Kontrol ImageList dari Komputer, di sesi sebelumnya dari Seri Tutorial ini.

Berikut adalah Sesi Tutorial Kontrol Tampilan Pohon yang telah kita bahas sejauh ini:

Tautan Sesi Tutorial Kontrol TreeView.

  1. Tutorial Kontrol Microsoft TreeView
  2. Membuat Menu Akses dengan Kontrol TreeView
  3. Menetapkan Gambar ke Kontrol TreeView
  4. Menetapkan Gambar ke TreeView Control-2
  5. TreeView Control Tanda Centang Tambah Hapus Node

Tampilan Demo Kedua ImageComboBox Diperluas.

Gambar Menu Drop-Down Proyek MS-Access yang telah selesai diberikan di bawah ini:

Tampilan Desain Gambar dari Formulir di atas diberikan di bawah ini:

Data Sumber GambarComboBox Drop-Down.

Data Sumber Menu Drop-Down Proyek MS-Access baru telah diambil dari Proyek Menu Akses kami sebelumnya.

Unduh database Demo sekarang, jika Anda belum melakukannya sebelumnya, dari item ke-4 Tautan yang diberikan di atas. Jika ya, maka Anda memiliki semua Objek data yang diperlukan untuk melanjutkan Sesi saat ini.

Ada tiga Tabel:Kategori, Produk, dan Menu meja. Ada dua form untuk menampilkan data Kategori dan Produk dan form parameter filter data untuk Laporan.

Kami memiliki dua Formulir lagi:frmMenu dan frmMenu2 yang telah kami gunakan untuk Sesi Tutorial kami sebelumnya.

Anda akan menemukan dua Laporan untuk Pratinjau Kategori dan Item Data Produk.

Dua Makro untuk menampilkan beberapa Pesan sederhana. Makro dapat digunakan untuk mengurutkan Kueri Tindakan untuk Pemrosesan data untuk Laporan yang rumit. Tindakan ini telah dilakukan dengan memilih Opsi dari Menu Proyek Kontrol TreeView di Sesi Tutorial sebelumnya.

Kami membutuhkan semua objek ini di sini juga karena kami akan membuat Menu Drop-Down baru menggunakan ImageComboBox Kontrol. Kita harus dapat membuka semua objek ini dengan memilih opsi di Menu Kontrol Drop-Down Baru, persis seperti yang kita lakukan di frmMenu2 Formulir, menggunakan Kontrol TreeView, dalam Database yang sama ini.

Menu gambar tabel diberikan di bawah ini untuk referensi Anda.

Menyiapkan Desain Formulir Menu Drop-Down.

Periksa Tampilan Desain Formulir Menu di atas, di sana kami memiliki dua Kontrol terkait Menu. Satu Kontrol ImageList dan satu Kontrol ImageComboBox. Satu lagi Kontrol ImageComboBox telah ditempatkan di sisi kanan Formulir untuk menampilkan ImageList's Gambar.

  1. Buat Salinan ImageList Kontrol dari frmMenu2 Bentuk dan Tempel di Formulir Baru, ucapkan frmMenu3Combo .

    Kontrol Daftar Gambar ini memiliki Gambar yang telah kami unggah secara manual dari Komputer di Sesi Tutorial kami sebelumnya. Anda dapat membuka Lembar Properti dan memeriksa Gambar dan Kunci mereka Nama. Klik kanan pada ImageList Control, sorot ImageListCtl Object dan pilih Opsi Properti.

  2. Kontrol ImageComboBox yang ditempatkan di sisi kiri pada Form adalah untuk Menu Drop-Down, dengan nama:imgCombo1 . Temukan Kontrol Microsoft ImageComboBox dari Kontrol ActiveX kelompok dan letakkan di Formulir. Ubah Nama kontrol menjadi imgCombo1 .

  3. Buat Kontrol ImageComboBox lain di sisi kanan, dengan nama imgCombo2 . ImageComboBox kedua yang akan kita gunakan untuk menampilkan Gambar dan Nama Kuncinya, dari ImageList0 Kontrol, sebagai daftar tarik-turun.

  4. Tambahkan kontrol Label di atas kontrol ImageComboBox kedua dan ubah Caption-nya menjadi Image List.

Daftar Gambar dalam Kontrol Kotak-Kombo Gambar.

Pertama, kita akan bekerja dengan imgCombo2 kedua Kontrol dan tampilkan Daftar Gambar dari Kontrol ImageList. Setelah Anda terbiasa dengan Kode, Anda akan memahami prosedur Pembuatan Menu Drop-down dengan sangat mudah.

Kami telah membagi frmMenu3Combo Bentuk Modul Kode VBA menjadi dua bagian. Mari kita ambil bagian pertama dan lihat apa yang kita miliki di sana.

Secara singkat, di area deklarasi global, variabel objek utama telah dideklarasikan. Form_Load() prosedur acara menginisialisasi kontrol ImageList pada Formulir ke variabel objeknya objimgList dan memanggil cboImageList() subrutin untuk menambahkan gambar dari kontrol ImageList ke kontrol ImageComboBox kedua. Mari kita lihat kodenya lebih dekat.

Kode vba bagian pertama, dengan Form_Load() dan cboImageList() subrutin yang tercantum di bawah ini:

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

Ulasan Kode VBA.

Pada area deklarasi global, kami telah mendeklarasikan dua kontrol ImageComboBox, imgCombo1 untuk menu proyek dan imgCombo2 untuk menampilkan gambar dari ImageList kontrol. Daftar objimg variabel yang dideklarasikan untuk kontrol ImageList pada formulir. Keyprfx variabel dengan karakter X dideklarasikan sebagai konstanta.

Dalam Form_Load() prosedur acara objimgList diinisialisasi dengan kontrol ImageList pada Formulir, dengan pernyataan:Set objimgList =Me.ImageList0.Object. Sekarang, semua gambar yang dimuat sebelumnya dalam kontrol ImageList tersedia untuk diakses melalui objek objimgList.

Pernyataan berikutnya memanggil sub-rutin cboImageList() untuk menambahkan semua Gambar ke ImgCombo1 kontrol.

CreateMenu() panggilan subrutin telah dikomentari untuk saat ini.

Dalam cboImageList() s ubroutine dua variabel telah dideklarasikan.

Selanjutnya, pernyataan Set imgCombo2 =Me.ImageCombo2.Object memberikan ImagecomboBox kedua pada formulir ke variabel objek imgCombo2.

Seperti kontrol TreeView, imgCombo2 memiliki ImageList properti, untuk meneruskan referensi kontrol ImageList ke kontrol ImageComboBox, untuk mengakses properti ImageList. Pernyataan berikutnya:imgCombo2.ImageList =objimgList melakukan itu.

Selanjutnya, Untuk . . . Selanjutnya Loop berjalan untuk jumlah Gambar di Kontrol ImageList.

Kunci- item ImageList pertama Nilai ('form_close') telah disimpan di strText variabel. Di sini, kami telah mengambil nilai Kunci kontrol Daftar Gambar sebagai Teks atau sebagai deskripsi gambar ImageCombo, karena hanya itu Teks yang tersedia. Tag properti kosong dan kami memiliki kegunaan lain dengan properti ini saat kami bekerja dengan menu tarik-turun.

Pernyataan berikutnya adalah pernyataan penting yang harus kita cermati, Tambah metode kontrol ImageComboBox. Sintaks dari pernyataan tersebut adalah sebagai berikut:

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

Semua parameter Tambah() metode adalah opsional. Untuk uji coba pertama kami dari kontrol ini, kami akan menggunakan nilai untuk [Teks], [Gambar], dan [Lekukan] hanya. Setelah melihat hasil uji coba pertama dari tampilan daftar gambar, kami tidak akan menggunakan nilai parameter [Indentasi] pada kontrol ImageCombo ini.

Catatan:Namun, perlu diingat bahwa kita memerlukan Indentasi Nilai properti untuk Menu Drop-Down untuk membuat item menu terlihat seperti Root-Node dan Child-Node pada TreeView Control. Kami akan menggunakan [Kunci] Parameter juga (untuk parameter Kunci dan Teks) untuk mengakses Tag item menu tertentu Nilai properti.

Daftar Gambar dengan penambahan Indentasi Pengaturan Param.

Daftar gambar uji coba pertama di ImageCombo2 akan terlihat seperti gambar di bawah ini, setelah menerapkan nilai inkremental untuk indentasi.:

Efek Indentasi jelas dari gambar uji coba di atas. Setiap item telah dipindahkan ke kanan, satu spasi lebih besar dari yang sebelumnya. Kita dapat menggunakan fitur ini untuk memposisikan Node item menu proyek kita, agar terlihat seperti Root-Level dan Child Node.

Setelah strText nilai ('form_close') variabel pertama j mengacu pada nomor indeks ImageList, parameter [SelImage] yang telah kita lewati dan nilai berikutnya di j telah digunakan untuk indentasi setiap item daftar ketika ditempatkan di daftar ComboBox. Setelah uji coba pertama dan setelah melihat hasilnya, Anda dapat menghapus semua parameter setelah nilai indeks gambar.

Pernyataan berikutnya:imgCombo2.ComboItems(1).Selected =True memilih item pertama di ComboBox. Saat Anda memilih item dari kontrol ImageCombo melalui kode Ubah() event terpicu, tetapi tidak saat Anda memilih item secara langsung di formulir. Pembaruan() event mengabaikan pembaruan manual Event, dan mencoba memanggil melalui Kode.

Simpan formulir frmMenu3Combo dan buka dalam Tampilan Normal. Perluas kontrol ImageList ComboBox kedua dan lihat hasilnya. Hapus koma dan variabel j di akhir, setelah variabel pertama j, dipertahankan untuk nomor indeks ImageList.

Kode VBA Menu Drop-Down Proyek.

Sekarang, kita akan melanjutkan dengan bagian kedua dari kode vba modul formulir untuk mempelajari cara membuat Menu Drop-Down Access dan melihat cara membuka Access Forms, Reports and Macros dengan memilih item kontrol ComboBox.

Bagian kedua dari kode vba, terdiri dari CreateMenu() subrutin dan ImageCombo1_Click() e prosedur ventilasi, telah tercantum di bawah ini:

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

Saya pikir, sebelum memulai dengan kode vba Anda harus melihat Gambar Tabel (gambar ketiga dari atas halaman ini) jika Anda belum melakukannya di sesi sebelumnya pembuatan Access Project Menu.

ID bidang memiliki nilai ID unik dan merupakan bidang AutoNumber.

Bidang Kedua Desc memiliki nama grup tipe objek (Formulir, Laporan, dan Makro) dan nama objek sebenarnya dari formulir, Laporan, dan Makro.

PID Nilai bidang (ID Induk) kosong untuk nama grup objek:Formulir, Laporan, dan Makro . Item nilai PID kosong ini akan kita posisikan di posisi kiri di Menu Drop-Down ImageComboBox, dengan lekukan spasi satu karakter, dan item lainnya akan dipindahkan ke depan dengan empat spasi karakter. Dengan pemosisian item ini, mereka akan terlihat seperti Node Level-Akar dan Level-Anak dalam kontrol TreeView, tetapi kita akan kehilangan Garis Pohon penghubung.

Periksa gambar di kontrol item yang dipilih ImageComboBox, gambar diposisikan di posisi paling kiri. Item Grup di baris berikutnya diposisikan setelah satu spasi karakter di sisi kiri dan item Grup lainnya juga muncul di posisi yang sama. Item anggota Anak di bawah setiap grup telah diposisikan setelah empat spasi karakter.

Nilai bidang PID telah diperiksa dan jika ditemukan kosong maka kami menganggap bahwa itu adalah nama grup jika tidak, itu adalah Nama Objek Akses yang perlu kami buka, ketika pengguna mengkliknya, dan memposisikannya sebagai anak anggota grup. Nilai Kunci sebenarnya di bidang PID tidak penting di sini. Dalam kedua kasus, kita membutuhkannya di sini. Namun, kita dapat menggunakan nilai bidang jenis untuk tujuan ini.

Selanjutnya, Jenis field berisi kode jenis objek:1 – Nama Formulir , 2 – Nama Laporan, dan 3 – Nama Makro . Tiga bidang berikutnya:Formulir, Laporan, dan Makro memiliki Nama Objek aktual berdasarkan kode masing-masing di bidang Jenis. Saya telah menggunakan tiga bidang berbeda untuk kejelasan, semuanya dapat ditempatkan dalam satu kolom juga.

Kode Jenis dan Nama Objek pasangkan (misalnya 2rptCategories ) akan disimpan di Tag ImageComboBox Properti.

Subrutin CreateMenu().

Sekarang, ke kode vba Subrutin CreateMenu().

Database dan variabel lainnya telah dideklarasikan di awal.

imgcombo1 objek v ariable telah diinisialisasi dengan Me.ImageCombo1. Objek pada formulir.

Selanjutnya, imgCombo1.ImageList properti telah dimuat dengan objek ImageList Referensi objimgList , sehingga kita dapat mengakses Nomor Indeks dan nilai Kunci ImageList secara langsung.

Selanjutnya, Menu Kumpulan catatan tabel terbuka dengan SQL String.

Nilai bidang PID telah diperiksa, jika kosong maka itu adalah nama grup objek, ID value diawali dengan Constant X dan disimpan di strKey variabel. Bidang Desc nilai telah disimpan di strText Variabel.

Pernyataan berikutnya memanggil metode Add() dari kontrol ImageComboBox dan item pertama telah ditambahkan ke Menu Drop-Down.

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

Nilai parameter pertama Nomor indeks telah dihilangkan, tetapi akan dibuat secara otomatis. strKey variabel terdiri dari nilai Bidang ID 1 dengan konstanta awalan X (X1 ) sebagai Kunci parameter. strText berisi Desc nilai bidang. Nilai berikutnya 1 adalah ImageList's gambar pertama (Nilai kunci folder_close ) Nilai indeks. Jika Anda lebih suka nilai Kunci 'folder_close' dalam tanda kutip, Anda dapat melakukannya. Nilai berikutnya 2 adalah nilai Indeks Gambar ('folder_open') kedua atau Anda dapat menggunakan 'folder_open' dalam tanda kutip dan parameter terakhir 1 adalah untuk lekukan.

Catatan: Untuk mengonfirmasi urutan Indeks Gambar di ImageList Kontrol periksa Urutan Cantuman Gambar di ImageCombo2 Tampilan yang telah kita buat tadi. Kita bisa mengawali nilai Indeks ke nilai Kunci dengan satu spasi untuk menambahkan angka itu juga ke nilai Kunci agar terlihat seperti [gambar] 1 form_close. [gambar] 2 form_open dan seterusnya . . . Ini saya serahkan kepada Anda sebagai latihan untuk diri sendiri.

Selanjutnya, jika nilai bidang PID bukan nol maka Opsi Menu yang sebenarnya menjadi Tambah ed di bawah Lainnya Klausa. Di sini, kami telah menambahkan item ImageCombo lain seperti yang kami lakukan sebelumnya. Untuk [Gambar] dan [SelImage] params kami telah mengambil nilai Indeks Item ImageList 4 dan 5 . Nilai param indentasi adalah 4 spasi karakter.

Di Add() Item Item ImageCombo Metode, di bawah Lain Klausul, kita perlu menyimpan Nama Objek Access (frmData Entry) bersama dengan Jenis Kode 1 di Tag (ImageCombo1.ComboItems.Item(strKey).Tag) Properti. Saat pengguna memilih item ini dari Menu Kotak Kombo Drop-Down, tombol Klik() peristiwa diaktifkan, Tag Nilai properti telah diekstraksi, kode Jenis telah dicentang, jika kode jenis 1 (Form) lalu bentuk-nama di Tag Property (frmData Entry) terbuka dengan DoCmd.OpenForm Perintah.

Dengan cara ini semua Menu Catatan tabel telah ditambahkan ke kontrol Image ComboBox.

Pernyataan imgcombo1.ComboItems.Item(1).Selected =True memilih item pertama sebagai item default di Image ComboBox Control. Pada waktu eksekusi kode ini Change() peristiwa terpicu, tetapi tidak ketika item dipilih dengan mengkliknya pada Tampilan Formulir.

NB: Sebelum membuka formulir untuk Uji Coba Menu Drop-down, harap hapus Simbol Komentar dari ‘CreateMenu saluran panggilan di Form_Load() Prosedur Acara. Kami telah mengomentari baris ini untuk sementara, selama uji coba tampilan Gambar dari Kontrol ImageList di Kontrol ImageCombo2.

ImageCombo1_Click() Event terpicu saat pengguna memilih item dari Image ComboBox Control. Tag item yang dipilih Nilai properti telah diperiksa untuk Kode Jenis &Nama Objek dan membukanya dengan Docmd.Objecttype ObjectName .

Basis Data Demo ProjectMenuV221.accdb dalam format .zip diberikan di bawah ini untuk Mengunduh.

Unduh ProjectMenuV221.zip

OBJEK KAMUS

  1. Dasar-dasar Objek Kamus
  2. Dasar-Dasar Objek Kamus-2
  3. Mengurutkan Kunci Objek dan Item Kamus
  4. Tampilkan Rekaman dari Kamus
  5. Menambahkan Objek Kelas sebagai Item Kamus
  6. Perbarui Item Kamus Objek Kelas


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tanda bahwa Database Anda Tidak Lagi Berfungsi untuk Anda

  2. 7 Strategi untuk Mendapatkan Hasil Maksimal dari Rapat Anda

  3. Seberapa Sering Anda Harus Mencadangkan Basis Data Anda?

  4. Mengatasi Kesalahan Ketidakcocokan Arsitektur Saat Menggunakan Microsoft Access

  5. Membuat Database Siswa dengan Microsoft Access