ExplorerBar Control for .NET

Posted by Kamarudin • 2 minute read • Comments

Ketika memutuskan untuk beralih ke VB .NET salah satu komponen yang saya buru adalah ExplorerBar dan kabar baiknya vbaccelerator juga sudah menyediakan komponen ini, tapi kabar buruknya sample source codenya menggunakan C# .NET :frowning:.

Tapi tenang aja, dulu saya juga pernah iseng2x belajar bahasa ini, jadi proses konversi dari C# .NET ke VB .NET pun berjalan lancar :).

Oke, klo sudah enggak sabaran langsung aja download librarynya disini dan untuk sample aslinya (bahasa C# .NET) bisa didownload disini.

Sama seperti postingan saya sebelumnya, untuk menambahkan Bar Menu (menu induk) dan Item Menu (menu anak) saya pisah menjadi 2 fungsi yaitu :

Private Function SetBarMenu(ByVal explorerBar As vbAccelerator.Components.Controls.acclExplorerBar, _
                            ByVal menuName As String, ByVal menuCaption As String, ByVal iconIndex As Integer) As explorerBar

    Dim barMenu As explorerBar

    barMenu = New explorerBar
    With barMenu
        .IsSpecial = True
        .iconIndex = iconIndex
        .Text = menuCaption
        .Tag = menuName
    End With

    Return barMenu

End Function

dan

Private Function SetItemMenu(ByVal explorerBar As vbAccelerator.Components.Controls.acclExplorerBar, _
                             ByVal menuName As String, ByVal menuCaption As String, ByVal iconIndex As Integer) As ExplorerBarLinkItem

    Dim barItem As ExplorerBarLinkItem

    barItem = New ExplorerBarLinkItem
    With barItem
        .iconIndex = iconIndex
        .Text = menuCaption
        .Tag = menuName ' ini berguna untuk menghandle menu yang diklik
    End With

    Return barItem
End Function

Selanjutnya kita tinggal gabungkan ke dua fungsi diatas

Private Sub AddMenu()
    Dim strSql As String = String.Empty
    Dim barMenu As explorerBar

    Try
        With AcclExplorerBar1
            .ImageList = ilsIcons
            .TitleImageList = ilsTitleIcons
            .DrawingStyle = ExplorerBarDrawingStyle.Custom

            .BackColorStart = Color.FromArgb(100, 149, 237)
            .BackColorEnd = Color.FromArgb(100, 149, 237)

            ' menampilkan menu induk
            strSql = "SELECT id, menu_name, menu_caption " & _
                     "FROM menu_induk " & _
                     "ORDER BY id"
            Dim cmdMenuInduk As New OleDb.OleDbCommand(strSql, conn)
            Dim dtrMenuInduk As OleDb.OleDbDataReader = cmdMenuInduk.ExecuteReader()
            If dtrMenuInduk.HasRows Then
                While dtrMenuInduk.Read()
                    barMenu = Me.SetBarMenu(AcclExplorerBar1, dtrMenuInduk.Item("menu_name").ToString(), dtrMenuInduk.Item("menu_caption").ToString(), 0)
                    Dim barItems As ExplorerBarItemCollection = barMenu.Items

                    ' menampilkan menu anak
                    strSql = "SELECT menu_name, menu_caption " & _
                             "FROM menu_anak " & _
                             "WHERE menu_induk_id = " & dtrMenuInduk.Item("id").ToString() & " " & _
                             "ORDER BY id"
                    Dim cmdMenuAnak As New OleDb.OleDbCommand(strSql, conn)
                    Dim dtrMenuAnak As OleDb.OleDbDataReader = cmdMenuAnak.ExecuteReader()
                    If dtrMenuAnak.HasRows Then
                        While dtrMenuAnak.Read()
                            Dim barItem As ExplorerBarLinkItem
                            barItem = Me.SetItemMenu(AcclExplorerBar1, dtrMenuAnak.Item("menu_name").ToString(), dtrMenuAnak.Item("menu_caption").ToString(), 0)
                            barItems.Add (barItem)
                        End While
                    End If
                    dtrMenuAnak.Close()
                    cmdMenuAnak.Dispose()

                    .Bars.Add (barMenu)
                End While
            End If
            dtrMenuInduk.Close()
            cmdMenuInduk.Dispose()

        End With

        ' set warna menu bar (master, transaksi, biaya, laporan)
        For Each bar As ExplorerBar In AcclExplorerBar1.Bars
            bar.TitleForeColor = Color.FromArgb(0, 0, 128)
            bar.TitleForeColorHot = Color.FromArgb(0, 0, 128)

            bar.TitleBackColorStart = Color.FromArgb(234, 241, 253)
            bar.TitleBackColorEnd = Color.FromArgb(100, 149, 237)

            bar.BackColor = Color.FromArgb(176, 196, 222)

            ' set warna menu item (barang, customer, supplier, dll)
            For Each itm As ExplorerBarItem In bar.Items
                Dim textItem As ExplorerBarLinkItem = CType(itm, ExplorerBarLinkItem)

                textItem.ForeColor = Color.FromArgb(0, 0, 128) ' bar.TitleBackColorEnd
                textItem.ForeColorHot = Color.White ' bar.TitleBackColorStart
            Next
        Next

    Catch ex As Exception
        Debug.Print (ex.Message)

    Finally
        conn.Close()
    End Try

End Sub

cuplikan source diatas menampilkan menu dari database (Ms Access), selanjutnya tinggal dipanggil di event Form_Load

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Call AddMenu
    Me.BackColor = Color.FromArgb(100, 149, 237)
End Sub

terakhir untuk menghandle menu yang diklik kita memanfaatkan property Tag ExplorerBar, nilai dari property Tag ini sudah kita set pada saat memanggil fungsi SetItemMenu

Private Sub AcclExplorerBar1_ItemClick(ByVal sender As Object, ByVal args As vbAccelerator.Components.Controls.ExplorerBarItemClickEventArgs) Handles AcclExplorerBar1.ItemClick
    Dim itmMenu As ExplorerBarLinkItem = CType(args.Item, ExplorerBarLinkItem)

    If itmMenu.Tag IsNot Nothing Then
        Select Case itmMenu.Tag.ToString()
            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

Selamat MENCOBA :blush:

Comments