Reputation: 313
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
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.
But if you change the DropDownWidth
(says, to 200)
Me.ComboBox1.DropDownWidth = 200 'change this
This is what you are going to get
The ComboBox
drop down box got wider.
Upvotes: 1