Gideon
Gideon

Reputation: 313

Multi column combobox change width

I have a vb.net combobox with three columns. How can I make the e.bounds a wider? I want to set the dropdown of the combobox wider than the actual combobox.

I used the following code :

   Private Sub BlokKiesCMB_DrawItem(ByVal sender As 
   System.Object, ByVal e As
   System.Windows.Forms.DrawItemEventArgs) 
   Handles BlokKiesCMB.DrawItem
    ' Draw the default background
    e.DrawBackground()

    ' The ComboBox is bound to a DataTable,
    ' so the items are DataRowView objects.
    Dim drv As DataRowView = CType(BlokKiesCMB.Items(e.Index), DataRowView)


    ' Retrieve the value of each column.
    Dim blokno As String = drv("blokno").ToString()
    Dim kultivar As String = drv("kultivar").ToString()
    Dim klas As String = drv("klas").ToString()

    ' Get the bounds for the first column

    Dim r1 As Rectangle = e.Bounds
    r1.Width = r1.Width / 3

    ' Draw the text on the first column
    Using sb As SolidBrush = New SolidBrush(e.ForeColor)
        e.Graphics.DrawString(blokno, e.Font, sb, r1)
    End Using

    ' Draw a line to isolate the columns 
    Using p As Pen = New Pen(Color.Black)
        e.Graphics.DrawLine(p, r1.Right, 0, r1.Right, r1.Bottom)
    End Using

    ' Get the bounds for the second column
    Dim r2 As Rectangle = e.Bounds
    r2.X = e.Bounds.Width / 3
    r2.Width = r2.Width / 3

    ' Draw the text on the second column
    Using sb As SolidBrush = New SolidBrush(e.ForeColor)
        e.Graphics.DrawString(kultivar, e.Font, sb, r2)
    End Using

    ' Draw a line to isolate the columns 
    Using p As Pen = New Pen(Color.Black)
        e.Graphics.DrawLine(p, r2.Right, 0, r2.Right, r2.Bottom)
    End Using



    ' Get the bounds for the third column
    Dim r3 As Rectangle = e.Bounds
    r3.X = r2.Width + r2.X
    r3.Width = r3.Width / 3



    ' Draw the text on the third column
    Using sb As SolidBrush = New SolidBrush(e.ForeColor)
        e.Graphics.DrawString(klas, e.Font, sb, r3)
    End Using


End Sub

Upvotes: 1

Views: 954

Answers (1)

Ian
Ian

Reputation: 30813

e.Bounds does not give you the sides of ComboBox or its DropDown box. Bounds refers to the position of the ComboBox relative to its parent. Read this for further reference.

Now, WinForms ComboBox has a property called DropDownWidth which allows you to control the width of the DropDown wider than the actual ComboBox's width. This property, by default, is set as the same value as the ComboBox's width.

Here is the actual example, the size of the ComboBox is 121, by default the size of its DropDown box will be 121 too.

enter image description here

But if you change the DropDownWidth (says, to 200)

Me.ComboBox1.DropDownWidth = 200 'change this

This is what you are going to get

enter image description here

The ComboBox drop down box got wider.

Upvotes: 1

Related Questions