Objek TreeView sebagai alternatif membuat menu

Posted by Kamarudin • 2 minute read • Comments

Pada postingan sebelumnya saya sudah membahas bagaimana membuat menu alternatif menggunakan komponen VBSmartMenu XP dan kali ini kita akan membahas bagaimana membuat menu menggunakan objek TreeView.

Objek TreeView digunakan untuk menampilkan data dalam bentuk Hirarki sehingga sangat cocok untuk menampilkan menu dalam jumlah banyak.

Pada pembahasan ini saya hanya membatasi untuk menampilkan menu 2 tingkat yaitu level 1 (menu induk) dan level 2 (menu anak), kedua menu tersebut akan disimpan didatabase Access dengan nama tabel MENU_INDUK dan MENU_ANAK.

Berikut adalah contoh rancangan tabelnya :

Untuk project VB sendiri kita akan tambahkan komponen (CTRL + T) Microsoft Windows Common Control 6.0 (SP6) kemudian tinggal drag komponen TreeView.

Oke jika semua data sudah siap tambahkan sebuah modul dan copy paste kode berikut :

Option Explicit

Public conn    As ADODB.Connection
Public strSql  As String

Public Function KonekToServer() As Boolean
    Dim strConn As String

    On Error GoTo errHandle

    strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path & "\database.mdb"

    Set conn = New ADODB.Connection
    conn.ConnectionString = strConn
    conn.Open

    KonekToServer = True

    Exit Function

errHandle:
    KonekToServer = False
End Function

Public Function openRecordset(ByVal query As String) As ADODB.Recordset
    Dim obj As ADODB.Recordset

    Set obj = New ADODB.Recordset
    obj.CursorLocation = adUseClient
    obj.Open query, conn, adOpenForwardOnly, adLockReadOnly
    Set openRecordset = obj
End Function

Public Sub closeRecordset(ByVal vRs As ADODB.Recordset)
    If Not (vRs Is Nothing) Then
        If vRs.State = adStateOpen Then vRs.Close
    End If

    Set vRs = Nothing
End Sub

Public Function getRecordCount(ByVal vRs As ADODB.Recordset) As Long
    vRs.MoveLast
    getRecordCount = vRs.RecordCount
    vRs.MoveFirst
End Function

Adapun contoh prosedur untuk menambahkan data ke TreeView adalah sebagai berikut :

Private Sub addMenu()
    Dim rsMenuInduk As ADODB.Recordset
    Dim rsMenuAnak  As ADODB.Recordset

    Dim root        As Node
    Dim i           As Long
    Dim x           As Long
    Dim rowCount(1) As Long

    mnuTree.Nodes.Clear
    With mnuTree.Nodes
        'menampilkan menu induk
        strSql = "SELECT id, menu_name, menu_caption " & _
                 "FROM menu_induk " & _
                 "ORDER BY id"
        Set rsMenuInduk = openRecordset(strSql)
        If Not rsMenuInduk.EOF Then
            rowCount(0) = getRecordCount(rsMenuInduk)

            For i = 1 To rowCount(0)
                Set root = .Add(, , rsMenuInduk("menu_name").Value, rsMenuInduk("menu_caption").Value)
                root.Bold = True

                'menampilkan menu anak
                strSql = "SELECT menu_name, menu_caption " & _
                         "FROM menu_anak " & _
                         "WHERE menu_induk_id = " & rsMenuInduk("id").Value & " " & _
                         "ORDER BY id"
                Set rsMenuAnak = openRecordset(strSql)
                If Not rsMenuAnak.EOF Then
                    rowCount(1) = getRecordCount(rsMenuAnak)

                    For x = 1 To rowCount(1)
                        .Add root, tvwChild, rsMenuAnak("menu_name").Value, rsMenuAnak("menu_caption").Value

                        rsMenuAnak.MoveNext
                    Next x
                End If
                Call closeRecordset(rsMenuAnak)

                rsMenuInduk.MoveNext
            Next i
        End If
        Call closeRecordset(rsMenuInduk)
    End With

    For i = 1 To mnuTree.Nodes.Count
        mnuTree.Nodes(i).Expanded = True
    Next
End Sub

Kemudian kita tinggal panggil di event Form_Load

Private Sub Form_Load()
    Dim ret As Boolean

    ret = KonekToServer

    'inisialisasi treeview
    With mnuTree
        .Style = tvwTreelinesPlusMinusText
        .LineStyle = tvwRootLines
        .Indentation = 300.47
    End With

    Call addMenu
End Sub

Kode untuk menghandle menu mana yang diklik :

Private Sub mnuTree_DblClick()
    If mnuTree.Nodes(mnuTree.SelectedItem.Index).Children = 0 Then 'menu anak
        Select Case mnuTree.SelectedItem.Key
            Case "mnuBarang": 'TODO : tampilkan frmBarang disini
            Case "mnuCustomer"
            Case "mnuSupplier"
            Case "mnuPembelian"
            Case "mnuReturPembelian"
            Case "mnuPenjualan"
            Case "mnuBiayaOperasional"
            Case "mnuGajiKaryawan"
            Case "mnuLapPembelian"
            Case "mnuLapJthTempo"
            Case "mnuLapPenjualan"
        End Select
    End If
End Sub

Contoh output program :

Source code lengkap bisa didownload disini.

Selamat mencoba :blush:

Comments