Senin, 05 Maret 2012

Multi coloum ComboBox .Net

Preview :


 Berikut Cara menambahkan kolom pada ComboBox , monggo download ae contohe:
Download Project

Multibox(user Control) :

Imports System.Math
Imports System.Drawing
Imports System.Windows.Forms

Public Class Multibox

#Region "Dimensions"
    Dim charSeperator As Char = ","         'Character seperation in the main box
    Dim intSelectedItem As Int16 = 0        'Index of the currently selected item
#End Region

#Region "Properties"

    Public Property Seperator() As Char     'The column seperator property
        Get
            Return charSeperator
        End Get
        Set(ByVal value As Char)
            charSeperator = value
        End Set
    End Property

    'Hide this property from designer window
    <System.ComponentModel.Browsable(False)> _
    ReadOnly Property Columns() As ListView.ColumnHeaderCollection      'Columns in the Listview
        Get
            Return ListView1.Columns
        End Get
    End Property

    'Hide this property from designer window
    <System.ComponentModel.Browsable(False)> _
    ReadOnly Property Items() As ListView.ListViewItemCollection        'Items in the listview
        Get
            Return ListView1.Items
        End Get
    End Property

#End Region

#Region "Show list"

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        'Hide and show the listview as the drop list for the box
        If ListView1.Visible Then
            ListView1.Visible = False
            Me.Height = Me.Height - ListView1.Height - 5
        Else
            ListView1.Left = TextBox1.Left
            ListView1.Width = TextBox1.Width
            ListView1.Top = TextBox1.Bottom
            ListView1.Visible = True
            Me.Height = Me.Height + ListView1.Height + 5
            ListView1.Items(intSelectedItem).Selected = True
        End If

    End Sub

    Private Sub TextBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Click
        Button1_Click(sender, e)
    End Sub

    Private Sub ListView1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.Click
        Button1_Click(sender, e)
    End Sub

#End Region

#Region "Select Item"

    Private Sub ListView1_ItemSelectionChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.ListViewItemSelectionChangedEventArgs) Handles ListView1.ItemSelectionChanged
        Try
            'Set the selected index number
            intSelectedItem = ListView1.SelectedItems(0).Index

            'Set the count to 0 for Item seperator
            Dim i As Int16 = 0

            'Loop through the items and get the values
            For Each tmpItem In ListView1.SelectedItems(0).SubItems
                If i = 0 Then
                    TextBox1.Text = tmpItem.Text
                Else
                    TextBox1.Text += charSeperator & " " & tmpItem.Text
                End If
                i += 1
            Next
        Catch ex As Exception
            'Just leave the exception and move on.
        End Try
    End Sub

#End Region

#Region "Fade in and out"

    Private Sub TextBox1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.MouseEnter
        Fade(Button1, True)
    End Sub

    Private Sub TextBox1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.MouseLeave
        Fade(Button1, False)
    End Sub

    Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter
        Dim cntrl As Control = CType(sender, Control)
        Fade(cntrl, True)
    End Sub

    Private Sub Button1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseLeave
        Dim cntrl As Control = CType(sender, Control)
        Fade(cntrl, False)
    End Sub

    Private Sub Fade(ByVal ctrl As Control, ByVal hovering As Boolean)
       

        Dim Sb_R, Sb_G, Sb_B As Int16 '           <--- RGB values for the starting backcolor
        Dim Sf_R, Sf_G, Sf_B As Int16 '           <--- RGB values for the starting forecolor
        Dim Eb_R, Eb_G, Eb_B As Int16 '           <--- RGB values for the ending backcolor
        Dim Ef_R, Ef_G, Ef_B As Int16 '           <--- RGB values for the ending forecolor

        Select Case hovering  ' True for MouseEnter, False for MouseLeave
            Case True
                Sb_R = SystemColors.Window.R           ' Assign the variables the
                Sb_G = SystemColors.Window.G           ' appropriate values based
                Sb_B = SystemColors.Window.B           ' on system-defined colors
                '                                         for control and control
                Sf_R = SystemColors.Window.R       ' text.
                Sf_G = SystemColors.Window.G
                Sf_B = SystemColors.Window.B

                Eb_R = SystemColors.ActiveCaption.R     ' Assign the variables the
                Eb_G = SystemColors.ActiveCaption.G     ' appropriate values based
                Eb_B = SystemColors.ActiveCaption.B     ' on system-defined colors
                '                                         for the title bar and the
                Ef_R = SystemColors.ActiveCaptionText.R ' title bar's text.
                Ef_G = SystemColors.ActiveCaptionText.G
                Ef_B = SystemColors.ActiveCaptionText.B
            Case False
                Sb_R = SystemColors.ActiveCaption.R     ' Assign the variables the
                Sb_G = SystemColors.ActiveCaption.G     ' appropriate values based
                Sb_B = SystemColors.ActiveCaption.B     ' on system-defined colors
                '                                         for the title bar and the
                Sf_R = SystemColors.ActiveCaptionText.R ' title bar's text.
                Sf_G = SystemColors.ActiveCaptionText.G
                Sf_B = SystemColors.ActiveCaptionText.B

                Eb_R = SystemColors.Window.R           ' Assign the variables the
                Eb_G = SystemColors.Window.G           ' appropriate values based
                Eb_B = SystemColors.Window.B           ' on system-defined colors
                '                                         for control and control
                Ef_R = SystemColors.Window.R       ' text.
                Ef_G = SystemColors.Window.G
                Ef_B = SystemColors.Window.B
        End Select

        Dim b_RIncrement As Int16 = Round(((Eb_R - Sb_R) / 16), 0)      ' Find the increments that
        Dim b_GIncrement As Int16 = Round(((Eb_G - Sb_G) / 16), 0)      ' the RGB values will take;
        Dim b_BIncrement As Int16 = Round(((Eb_B - Sb_B) / 16), 0)      ' 1/16th of the difference
        '                                                                 between the start and end
        Dim f_RIncrement As Int16 = Round(((Ef_R - Sf_R) / 16), 0)      ' values, rounded to the
        Dim f_GIncrement As Int16 = Round(((Ef_G - Sf_G) / 16), 0)      ' nearest integer.
        Dim f_BIncrement As Int16 = Round(((Ef_B - Sf_B) / 16), 0)

        Dim bR As Int16 = Sb_R ' \
        Dim bG As Int16 = Sb_G '  }--  the RGB values for the backcolor as it changes.
        Dim bB As Int16 = Sb_B ' /

        Dim fR As Int16 = Sf_R ' \
        Dim fG As Int16 = Sf_G '  }--  the RGB values for the forecolor as it changes.
        Dim fB As Int16 = Sf_B ' /

        Dim count As Int16
        For count = 0 To 14
            bR += b_RIncrement          ' Add the appropriate increments to the
            bG += b_GIncrement          ' RGB values.  The result is a nifty
            bB += b_BIncrement          ' "cross-fade" effect.
            fR += f_RIncrement
            fG += f_GIncrement
            fB += f_BIncrement

            'ctrl.BackColor = Color.FromArgb(bR, bG, bB)   ' Repaint the button using the
            ctrl.ForeColor = Color.FromArgb(fR, fG, fB)   ' current RGB values, and refresh
            ctrl.Refresh()                                ' the button.

            Threading.Thread.Sleep(30 - (count * 2))      ' Wait a certain number of milliseconds,
            '                                               which is a factor of the current count.
            '                                               I tweaked these numbers to get a decent
            '                                               effect; feel free to adjust these
            '                                               numbers to achieve an effect you like.
        Next
        Select Case hovering
            Case True
                ctrl.BackColor = SystemColors.ActiveCaption         ' Finish the effect by painting
                ctrl.ForeColor = SystemColors.ActiveCaptionText     ' the control with it's final
            Case False                                              ' look, depending on whether
                ctrl.BackColor = SystemColors.Window               ' we're fading in or out.
                ctrl.ForeColor = SystemColors.Window
        End Select
    End Sub

#End Region

#Region "Component resize and new"

    Private Sub Multibox_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        If ListView1.Visible = False Then
            Me.Height = 26
        End If
    End Sub

    Public Sub New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()

        ' Add any initialization after the InitializeComponent() call.
        ListView1.MultiSelect = False
        ListView1.FullRowSelect = True
    End Sub

#End Region

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

    End Sub
End Class
 

Form:

        Multibox1.Columns.Add("Nama")
        Multibox1.Columns.Add("Panggilan")

        Multibox1.Items.Add("Mas Semar")
        Multibox1.Items(0).SubItems.Add("Semar")
        Multibox1.Items.Add("Petruk")
        Multibox1.Items(1).SubItems.Add("Truk")





5 komentar:

  1. min, kalo source code buat multi column pake database my sql gmn?
    mohon pencerahan, terima kasih

    BalasHapus
  2. coba datanya ditampung dulu di dataset atau datatable, terus sesuaikan nama coloumnya dengan coloum yang ada di datatable dgn menggunakan perulangan,,,

    ex :
    For Each DColumn As DataColumn In dtable.Columns
    Multibox1.Columns.Add(DColumn.ColumnName.ToString)
    Next

    untuk isi baris nya tinggal add dari baris datatable tadi, dengan menggunakan perulangan dari tiap baris yang ada didatatable,,,

    ex:
    dim i as integer=0
    For Each DRow As DataRow In dtable.Rows
    Multibox1.Items.Add(row.Item(0))
    Multibox1.Items(i).SubItems.Add(row.Item(1))
    i=i+1
    Next

    Silahkan di coba...

    BalasHapus
  3. ini vb net 2008 y om...
    wah... aku nyari yg vb 2010... T_T

    thx buat tutornya

    BalasHapus
  4. min, tolong diperjelas lagi dong,,
    sintax yang om kasih
    aku masih newbie
    maksud "dtable" itu apa??

    jadi aku mau nampilin data yang di table "tblpengajar"
    fieldnya nama_dosen, matkul, hari, kelas

    aku punya sintax kaya gini
    Try
    Call Koneksi()
    Tampil.Connection = Database
    Tampil.CommandType = CommandType.Text
    Tampil.CommandText = "Select nama_dosen,matkul,hari,kelas from tblpengajar "
    Tampilkan = Tampil.ExecuteReader
    Tampilkan.Read()
    With Multibox1
    .Columns.Add("nama dosen").ToString()
    .Columns.Add("matkul").ToString()
    .Columns.Add("hari").ToString()
    .Columns.Add("kelas").ToString()
    .Items.Add(Tampilkan("nama_dosen"))
    .Items(0).SubItems.Add(Tampilkan("matkul"))
    End With
    Catch ex As Exception
    MsgBox(ex.ToString())
    End Try

    yang muncul cuma 1 nama dosen sama 1 matkul,,
    sedangkan datanya ada 5 nama dosen, 5 matkul, 5 hari sama 5 kelas

    source codenya di bagian SubItems udah aku utak atik, tetep ga bisa,,

    mohon pencerahannya om master

    terima kasih :D
    mohon dibalas

    BalasHapus
  5. tolong bantuanya,code untuk pencarian row listview tanpa memanggil dttable/database jadi item yang kita cari focus pada listview

    BalasHapus