Pengantar.
Dalam Episode Tutorial Kontrol Tampilan Pohon ini, kita akan mempelajari cara Menambahkan/Menghapus Node. Posisi item kandidat Tambah/Hapus akan dicentang, di mana kita ingin Tambah() Node baru atau ke Remove() Node yang ditandai. Penambahan Node dapat berada pada level yang sama dengan Node yang ditandai atau sebagai Child Node.
Sesi Tutorial Kontrol TreeView sejauh ini.
- Tutorial Kontrol Microsoft TreeView
- Membuat Menu Akses dengan Kontrol TreeView
- Menetapkan Gambar ke Kontrol TreeView
- Menetapkan Gambar ke TreeView Control-2
Tampilan Normal Kontrol Tampilan Pohon Demo pada Formulir MS-Access, dengan kontrol lainnya, diberikan di bawah ini.
Tabel Data untuk Demo Kontrol TreeView.
Tabel dengan nama Sampel, kami telah menggunakan di Sesi Tutorial pertama, kami akan menggunakannya di sini juga. Ini adalah tabel kecil dengan catatan Access Database, tabel, struktur kontrol Formulir dan Laporan, disusun dalam urutan hierarkis, dan mudah dipahami.
ID kolom (Tampilan Pohon Kunci ) adalah bidang AutoNumber.
Pengunjung Baru Diperbarui untuk Sesi Tutorial ini.
Jika Anda belum melalui Sesi Tutorial pertama maka Anda dapat mengunduh Demo Database dari Halaman Sesi kedua:Membuat Menu Akses dengan Kontrol Tampilan Pohon. Ada Tabel di Database itu dengan nama:Sampel dan Formulir frmSample . Anda dapat Mengimpornya ke database Anda saat ini. Ada bentuk lain dengan nama frmMenu di sana dan Anda dapat Menyalin Tombol Perintah Perluas Semua, Ciutkan Semua, dan Prosedur Acara Klik Tombol Perintah mereka dari frmMenu ke frmSample Modul Kode untuk melanjutkan sesi ini.
Seperti yang telah saya sebutkan sebelumnya, kita dapat membagikan Kontrol ImageList, dengan Gambar yang diunggah ke Proyek lain, kita akan membuat salinan Kontrol ImageList dari Sesi Tutorial terakhir dan membawanya ke sini, dengan semua gambar yang diunggah, dan menggunakannya pada Node Kontrol Tampilan Pohon di frmSample .
Mengimpor Kontrol Daftar Gambar dengan Gambar.
Anda dapat memasukkan Kontrol ImageList yang sudah Anda miliki, dengan Gambar yang diunggah ke database lain, dengan cara berikut:
-
Impor Formulir dengan Kontrol ImageList ke database aktif, dari Database tempat Anda memiliki kontrol ImageList dengan Gambar yang diunggah secara manual. Salin dan Tempel Kontrol ImageList ke Formulir, di tempat yang Anda inginkan.
-
Atau, Salin Kontrol ImageList ke Clipboard, dari Database, di mana Anda memilikinya, terlebih dahulu. Jika Anda telah mengunduh Demo Database dari Sesi Tutorial sebelumnya, maka Anda sudah memiliki Kontrol ImageList dengan gambar yang diunggah. Tutup Database setelah menyalin kontrol ImageList ke Clipboard.
-
Buka database target dan buka Formulir di mana Anda ingin Kontrol ImageList dan Tempelkan di Formulir.
Dengan baris kode berikut di CreateTreeView() Sub-Rutin Anda dapat meneruskan Referensi Objek ImageList ke Kontrol Tampilan Pohon.
Dim tv As MSComctlLib.TreeViewDim ImgList As MSComctlLib.ImageListSet tv =Me.TreeView0 .Objecttv.Nodes.ClearSet ImgList =Me.ImageList0 .Objecttv.ImageList =ImgList
Ubah Nama Objek yang disorot dalam Kode, jika berbeda pada Formulir.
Setelah itu, Anda dapat menambahkan Nama Kunci Gambar ke dalam TreeView Nodes.Add() dua parameter terakhir metode.
Latihan-latihan ini telah kita lakukan di sesi-sesi sebelumnya. Untuk mengingatkan Anda bahwa kami menggunakan Kontrol Tampilan Tabel dan Pohon yang telah kami buat di Sesi Tutorial pertama dan diimplementasikan dengan perubahan yang dijelaskan di atas.
Menampilkan Nilai Properti Node Bertanda Centang.
Kunci Node yang dipilih , Kunci Induk, dan Teks Properties ditampilkan di TextBox di sisi kanan Tree View Control. Kotak Centang dengan Caption:Child Node, Hapus Simpul, dan Tambahkan Simpul Tombol Perintah adalah tambahan baru pada Formulir. Fungsi mereka akan dijelaskan dalam waktu singkat.
Menampilkan Kotak Centang pada Kontrol TreeView.
Biasanya, Kotak Centang tidak ditampilkan pada Kontrol TreeView, kecuali jika kita mengaktifkan Properti di Lembar Properti Kontrol Tree View. Ini hanya memiliki beberapa fungsi terbatas di sini. Apa pun yang akan kita lakukan di sini dapat dilakukan tanpa kotak centang juga.
Pendekatan yang lebih baik untuk penggunaan Kotak Centang dapat, sebagai persiapan Laporan di lokasi cabang yang dipilih dari Bisnis Perusahaan, berdasarkan pilihan acak yang dapat dipilih pengguna dari cabang, dari Menu Proyek Akses.
Di sini, tujuannya adalah untuk memberikan kesadaran tentang fitur ini dan menjalankan demo tentang penggunaannya.
- Buka Formulir dengan Kontrol TreeView di Design View.
- Klik kanan pada Kontrol TreeView, sorot Objek TreeCtrl , pilih Properti opsi untuk menampilkan Lembar Properti.
- Letakkan Tanda Centang pada Kotak Centang pilihan pada Properties Control seperti yang ditunjukkan pada Gambar yang diberikan di bawah ini.
Gambar Demo TreeView yang diberikan di bagian atas, Detail.
Mari kita lihat apa yang kita miliki di Formulir Demo frmSample disajikan di bagian atas halaman ini. Kontrol Tampilan Pohon dan dua Tombol Perintah teratas, Luaskan Semua dan Ciutkan Semua, di Klik Melebarkan atau Menciutkan Node dan kita telah melihat fungsinya di episode terakhir.
Di sisi kanan ada tiga TextBox, di bawah judul Label:Property Values , untuk menampilkan Kunci Node yang bertanda centang , ParentKey, dan Teks Nilai.
Penghapusan Node Command Button menghapus Node yang dicentang atau Node dan Child Node-nya.
Sebelum Memilih Tambahkan Tombol Perintah Node , Teks Nilai Properti harus diedit untuk mengganti dengan Nilai Teks baru untuk Node baru.
Di atas Tambahkan Node Tombol Perintah, ada Kotak Centang dengan label Child Node. Tambahkan Node dan Simpul Anak Check-Box bekerja sama untuk mengatur Rule, dimana Node baru akan muncul.
Memahami Tindakan Tambahkan Node.
Asumsikan Anda ingin menambahkan Node baru untuk Hyperlink bidang di bawah Bidang grup (atau Parent Node) tipe data Daftar. Lihat Gambar Demo yang diberikan di bagian atas halaman ini, di mana saya telah menandai Bidang Tanggal Node, antara lain Child-Node. Lembar Properti sisi Kanan menunjukkan Kuncinya:X15 , ParentKey:X4 &Teks:Bidang Tanggal Deskripsi.
Ubah Teks:Bidang Tanggal ke Hyperlink pada Kotak Teks tampilan Properti dan Klik Tambahkan Node Tombol perintah. Outputnya akan seperti gambar di bawah ini:
Jika Anda memberi Centang pada Bidang item parent Node dan beri tanda centang di Child-Node opsi, di atas Tambahkan Node Tombol Perintah, Anda akan mendapatkan hasil yang sama.
Sebaliknya, jika Anda membiarkan tanda centang Node pada Bidang Tanggal dan atur tanda centang pada Child-Node opsi di atas Tambahkan Node Command Button, Anda akan mendapatkan hasil seperti gambar di bawah ini.
Node Anak akan dibuat di bawah Node Bertanda Centang.
Tindakan Add Node perlu membuat record baru di tabel yang mendasarinya terlebih dahulu.
Rekor baru dibuat di Contoh Tabel, dengan Teks baru:HyperLink dan ID Orang Tua Nilai. Bidang AutoNumber menghasilkan Nomor baru dan kami mengambilnya dan menggunakannya sebagai Nilai Kunci untuk Node.
Kode VBA sub-rutin Add Node diberikan di bawah ini:
Sub pribadi cmdAdd_Click()Dim strKey Sebagai StringDim lngKey Sebagai LongDim strParentKey Sebagai StringDim lngParentkey Sebagai LongDim strTeks Sebagai StringDim lngID Sebagai LongDim strIDKey Sebagai StringDim childflag Sebagai IntegerDim db Sebagai DAO.qDatabaseDimDim strS As Integeri =0Untuk Setiap tmpnode Di tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True i =i + 1 End IfNextIf i> 1 Then MsgBox "Selected Nodes:" &i &vbCr &"Pilih hanya Satu Node untuk menandai Penambahan .", 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])'Baca child Node Option settingchildflag =Nz(Me.ChkChild.Value, 0)intflag =0strSql ="INSERT INTO Sample ([Desc], [ParentID] ) "Jika lngParentkey =0 Dan childflag =0 Kemudian 'Tambahkan Root-level Node, ParentKey i s Blank strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &" " strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =1ElseIf (lngParentkey>=0) And (childflag =True) Kemudian 'Sisipkan Node anak ke Node Bertanda Centang, di sini Nilai kunci digunakan sebagai ParentKey strSql =strSql &"SELECT '" &strText &"' AS [Desc ], '" &lngKey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =2ElseIf (lngParentkey>=0) Dan (childflag =False) Kemudian 'Sisipkan Node pada level yang dicentang, Tambahkan item di bawah ParentKey yang sama strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &lngParentkey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =3End IfSet db =CurrentDbdb.Execute strSql'Dapatkan autonumber yang baru dibuat untuk digunakan sebagai KeylngID =DMax("ID", "Sample")strIDKey =KeyPrfx &CStr(lngID)On Error GoTo IdxOutofBoundSelect Case intflag Case 1 'Tambahkan Root- level Node, ParentKey is Blank tv.Nodes.Add , , strIDKey, strText, "folder_close", "folder_open" Kasus 2 'Memasukkan Node anak ke Node yang Ditandai Centang, di sini Nilai kunci digunakan sebagai ParentKey tv.Nodes.Add strKey , tvwChild, strIDKey, strText, "left_arrow", "right_arrow" Kasus 3 'Sisipkan Node pada level yang ditandai, Tambahkan item di bawah ParentKey yang sama tv.Nodes.Add strParentKey, tvwChild, strIDKey, strText, "left_arrow", " right_arrow"End Selecttv.Refresh 'Hapus Nilai Properti dari Formulir Dengan Saya .TxtKey ="" .TxtParent ="" .Text ="" End WithSet db =NothingcmdExpand_Click cmdAdd_Click_Exit:Exit SubIdxOutofBound:CreateTreeViewResume cmdEndAdd_ClickMari kita periksa Kode VBA. Setelah Deklarasi Variabel lokal, TreeView Nodes dipindai untuk tanda centang dan mengambil Hitungan item yang ditandai. Jika Node yang dicentang lebih dari satu maka akan muncul pesan dan membatalkan Program.
Catatan: Alih-alih Menandai Centang, kita dapat langsung Klik pada Node untuk memilihnya. Dalam kedua kasus, Node yang Dicentang/Diklik diteruskan sebagai parameter ke Prosedur Peristiwa. Tanda centang baik bila Anda perlu memilih lebih dari satu item dari Menu Proyek, misalnya:untuk pemilihan kumpulan Data yang berbeda untuk laporan tertentu, dll.
Nilai Properti Node yang dicentang dibaca dari kontrol Formulir ke strKey , strParentKey, dan strText. ID, Nilai Numerik ParentID diekstraksi dan disimpan di lngKey dan lngParentKey Variabel untuk digunakan dalam SQL String.
Selanjutnya, Child-Node Nilai Kotak Centang disimpan di ChildFlag Variabel.
Tiga set SQL String yang berbeda dibuat berdasarkan Node yang dipilih dan Child-Node Centang opsi Kotak di atas Tombol perintah Tambahkan Node.
- Jika ID Orang Tua Nilai Properti pada Formulir kosong dan Child Node check-box tidak dicentang maka Record baru Root-Level akan dibuat karena pengguna Men-Centang Node Root-level.
- Jika ID Orang Tua Nilai Properti>=0 dan Simpul Anak kotak centang dipilih (dicentang ) kemudian record baru dibuat sebagai Child-Node ke Check-Marked Node. Kunci Node yang ditandai centang (ID) digunakan sebagai ParentID pada Record baru untuk Node baru.
- Jika ID Orang Tua Nilai >=0 dan Simpul Anak opsi kotak centang tidak dipilih (tidak dicentang ) maka Rekor Baru dibuat untuk Node baru, pada level yang sama dengan Node yang diberi tanda centang.
intFlag Variabel diatur dengan salah satu dari tiga nilai:1,2 atau 3, tergantung pada eksekusi SQL, sebagai indikasi untuk jenis Node yang akan dibuat pada Tree View Control.
Selanjutnya, berdasarkan pemilihan opsi, SQL dijalankan untuk membuat Catatan Baru pada Contoh Tabel, dengan Nilai Bidang ID AutoNumber baru.
Selanjutnya, DMax() Fungsi mengembalikan Unique Record ID sebagai Key-Value untuk Node baru.
Berdasarkan opsi tipe Node (1,2 atau 3) Node dibuat di Tree View Control.
Konten Kotak Teks tampilan Properti dihapus.
Menghapus Node atau Node dengan Anak.
Hapus Node Pilihannya jauh lebih mudah daripada latihan sebelumnya. Cukup Hapus Node Bertanda Centang dan Anak-anaknya, jika ada, dari Kontrol Tampilan Pohon. Catatan terkait juga Dihapus dari Tabel.
Kode VBA untuk Penghapusan Node diberikan di bawah ini:
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 StringFor-marked Node' tv.Nodes If tmpnode.Checked Then tmpnode.Selected =True strKey =tmpnode.Key j =j + 1 End IfNext If j> 1 Kemudian 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'periksa keberadaan Child Node dari NodeIf tmpnode.Children> 0 Then' Peringatan:' Menghapus Node Secara Acak akan meninggalkan Node yang tidak aktif' di Tabel dan berakhir dengan kesalahan, selama proses pemuatan Tree View berikutnya strMsg ="The Marked Node have " &tmpnode.Children &" Children. " &vbCr &"Hapus Node Anak juga?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Kemudian 'Periksa dua kali dan dapatkan konfirmasi. strMsg ="Hapus hanya kumpulan Node Anak yang paling dalam" &vbCr strMsg =strMsg &"dan Node Induknya sekaligus." &vbCr &vbCr strMsg =strMsg &"Apakah Anda yakin untuk melanjutkan..?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Kemudian Lakukan Hingga tmpnode.Children =0 nodId =Val(Mid(tmpnode.Child.Key, 2)) 'Delete Child Node tv.Nodes.Remove tmpnode .Child.Index 'Hapus catatan terkait strSql ="HAPUS 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 FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql 'Hapus Nilai Properti dari Formulir Dengan Saya .TxtKey ="" .TxtParent ="" .Text ="" End With Set db =Nothing End SubSetelah Deklarasi Variabel lokal Untuk Setiap . . . Selanjutnya Loop mengambil hitungan Node dengan tanda centang. Jika ditemukan lebih dari satu item bertanda centang, sebuah pesan akan ditampilkan dan program dibatalkan.
Jika hanya ada satu item yang dicentang maka langkah kedua Cek Validasi mencari keberadaan Child Node(s) dari Node yang dipilih. Jika node anak ditemukan, maka pesan akan ditampilkan pada efek itu. Pengguna perlu mengonfirmasi ulang niatnya untuk melanjutkan menghapus Node anak terlebih dahulu dan kemudian Node induk yang dicentang.
Catatan: Pengguna disarankan untuk menghapus Node Anak tingkat terdalam terlebih dahulu, atau semua Node anak tingkat terdalam dengan Node induk langsung mereka, dengan menandai Node induk saja, tidak menandai Node grand-parent. Membatasi aturan penghapusan pada tingkat ini akan membuat Kode tetap sederhana dan mudah dimengerti. Melanggar aturan ini dapat membuat beberapa Node menjadi yatim piatu dan berakhir dengan kesalahan saat Tampilan Pohon dibuka di lain waktu .
Node Anak dihapus satu per satu dan catatan terkait di tabel juga dihapus, satu demi satu. Kemudian hapus Catatan Induk yang ditandai.
Jika Node yang ditandai tidak memiliki Child Node, maka Node tersebut akan segera dihapus setelah pemeriksaan validasi dan record tabel terkait juga dihapus.
Isi Kotak Teks tampilan Properti pada formulir dihapus.
Formulir dari Modul Kelas Lengkap Kode VBA.
Berikut ini adalah Kode VBA lengkap di frmSample Modul Kelas, dengan sub-rutin kecil lainnya untuk memperluas Node yang runtuh, TreeView0_NodeCheck Prosedur Acara, cmdExit Acara Klik Tombol Perintah, Form_Load() Prosedur, dan CreateTreeView() Subrutin:
Pilihan Bandingkan 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 AsKey StringDim PanjangDim str StringDim childflag As IntegerDim db As DAO.DatabaseDim strSql As StringDim intflag As IntegerDim tmpnode As MSComctlLib.NodeDim i As Integeri =0Untuk Setiap tmpnode Di tv.Nodes If tmpnode.Checked IfNext tmpnode>Selectedi =True .i 1 Kemudian 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(Pertengahan(strKey, 2))strParentKey =Pangkas(Saya![TxtParent])lngParentkey =IIf(Len(strParentKey)> 0, Val(Pertengahan(strParentKey, 2)), 0)strText =Pangkas(Saya![ Text])'Baca child Node Option settingchildflag =Nz(Me.ChkChild.Value, 0)intflag =0strSql ="INSERT INTO Sample ([Desc], [ParentID] ) "Jika lngParentkey =0 Dan childflag =0 Kemudian 'Tambahkan 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) Kemudian 'Sisipkan Node anak ke Node Bertanda Centang, di sini Nilai kunci digunakan sebagai ParentKey strSql =strSql &"SELECT '" &strText &"' AS [Desc ], '" &lngKey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =2ElseIf (lngParentkey>=0) Dan (childflag =False) Kemudian 'Sisipkan Node pada level yang dicentang, Tambahkan item di bawah ParentKey yang sama strSql =strSql &"SELECT '" &strText &"' AS [Desc], '" &lngParentkey strSql =strSql &"' AS ParentID FROM Sample WHERE ((Sample.ID =1));" intflag =3End IfSet db =CurrentDbdb.Execute strSql'Dapatkan autonumber yang baru dibuat untuk digunakan sebagai KeylngID =DMax("ID", "Sample")strIDKey =KeyPrfx &CStr(lngID)On Error GoTo IdxOutofBoundSelect Case intflag Case 1 'Tambahkan Root- level Node, ParentKey is Blank tv.Nodes.Add , , strIDKey, strText, "folder_close", "folder_open" Kasus 2 'Memasukkan Node anak ke Node yang Ditandai Centang, di sini Nilai kunci digunakan sebagai ParentKey tv.Nodes.Add strKey , tvwChild, strIDKey, strText, "left_arrow", "right_arrow" Kasus 3 'Sisipkan Node pada level yang ditandai, Tambahkan item di bawah ParentKey yang sama tv.Nodes.Add strParentKey, tvwChild, strIDKey, strText, "left_arrow", " right_arrow"End Selecttv.Refresh 'Erase Property Values from Form With Me .TxtKey ="" .TxtParent ="" .Text ="" End WithSet db =NothingcmdExpand_Click cmdAdd_Click_Exit:Exit SubIdxOutofBound:CreateTreeViewResume SubPrivate cmdAdd_Click_Exit 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 As StringDim strMsg hitung Get' strMsg Setiap tmpnode Di tv.Nodes If tmpnode.Checked Kemudian tmpnode.Selected =True strKey =tmpnode.Key j =j + 1 End IfNext If j> 1 Then MsgBox "Selected Nodes:" &j &vbCr &"Pilih Hanya Satu Node untuk Delete.", vbCritical, "cmdDelete()" Exit Sub End IfSet tmpnode =tv.Nodes.Item(strKey)tmpnode.Selected =TrueSet db =CurrentDb'periksa keberadaan Child Node dari NodeIf tmpnode.Children yang ditandai> 0 Kemudian'Peringatan:' Menghapus Node Secara Acak akan meninggalkan Node yatim piatu' di Tabel dan berakhir dengan kesalahan, selama proses pemuatan Tree View berikutnya strMsg ="The Marked Node have " &tmpnode.Children &" Children. " &vbCr &"Hapus Node Anak juga?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Kemudian 'Periksa dua kali dan dapatkan konfirmasi. strMsg ="Hapus Hanya kumpulan Node Anak terdalam" &vbCr strMsg =strMsg &"dan Node Induk mereka pada satu waktu." &vbCr &vbCr strMsg =strMsg &"Apakah Anda yakin untuk melanjutkan..?" If MsgBox(strMsg, vbYesNo + vbCritical, "cmdDelete()") =vbYes Kemudian Lakukan Hingga tmpnode.Children =0 nodId =Val(Mid(tmpnode.Child.Key, 2)) 'Delete Child Node tv.Nodes.Remove tmpnode.Child.Index 'Delete the related 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 )) 'Hapus tv Induk.Nodes.Hapus tmpnode.Key tv.Refresh 'Hapus Rekaman yang Ditandai d strSql ="HAPUS Sample.*, Sample.ID FROM Sample WHERE (((Sample.ID)=" &nodId &"));" db.Execute strSql 'Hapus Nilai Properti dari Formulir Dengan Saya .TxtKey ="" . TxtParent ="" .Text ="" Akhiri Dengan Set db =Tidak Ada yang Berakhir SubPrivate Sub cmdExpand_Click()Dim nodExp As MSComctlLib.Node Untuk Setiap nodExp Di tv.Nodes nodExp.Expanded =True NextEnd SubPrivate Sub cmdCollapse_Click()Dim nodExp Sebagai MSComctlLib. Node Untuk Setiap nodExp Di tv.Nodes nodExp.Expanded =False NextEnd SubPrivate Sub Form_Load() CreateTreeView cmdExpand_ClickEnd SubPrivate Sub CreateTreeView()Dim db As DatabaseDim pertama Sebagai RecordsetDim nodKey Sebagai StringDim ParentKey As StringDim strText As StringDim strText As StringDim tvS .Objecttv.Nodes.Clear'Pass referensi kontrol ImageList ke Properti ImageList TreeView.Set ImgList =Me.ImageList0.Objecttv.ImageList =ImgListstrSql ="PILIH 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, "") ="" Kemudian nodKey =KeyPrfx &CStr(rst!ID) strText =pertama!desc tv.Nodes.Add , , nodKey, strText, "folder_close", "folder_open" Lain 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 GoTo 0Set rst =NothingSet db =NothingEnd SubPrivate Sub TreeViewByValdeCheck Node As Object)Redupkan 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 SubTampilan Desain dari Formulir frmSample diberikan di bawah ini:
Pengamatan, Komentar, Saran Anda dipersilahkan.
Basis Data Demo terlampir untuk Unduhan.
OBJEK KAMUS
- Dasar-dasar Objek Kamus
- Dasar-Dasar Objek Kamus-2
- Mengurutkan Kunci Objek dan Item Kamus
- Tampilkan Rekaman dari Kamus
- Menambahkan Objek Kelas sebagai Item Kamus
- Perbarui Item Kamus Objek Kelas