我创建了一个自定义组合框,它使用列表框控件的自定义实例作为下拉菜单。
为了自定义列表框的选择突出显示,我不得不将其'DrawMode'属性更改为'OwnerDrawFixed'并添加以下代码:
Private Sub _listBox_DrawItem(sender As Object, e As DrawItemEventArgs)
If e.Index >= 0 Then
e.DrawBackground()
If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
Using br = New LinearGradientBrush(e.Bounds, ColorSelectionListbox, ColorSelectionListbox, 0)
e.Graphics.FillRectangle(br, e.Bounds)
End Using
End If
Using b As New SolidBrush(ColorTextListbox)
e.Graphics.DrawString(_listBox.GetItemText(_listBox.Items(e.Index)), e.Font, b, e.Bounds)
End Using
e.DrawFocusRectangle()
RaiseEvent DrawItem(Me, e)
End If
End Sub
但是这样,我为它设置的宽度被忽略,并且变成15个左右像素的固定宽度。
如何设置所有者绘制控件的宽度?目前我将它作为财产:
Public Property DropDownWidth() As Integer
Get
Return _dropDownWidth
End Get
Set(value As Integer)
_dropDownWidth = value
_listBox.Width = value
Invalidate(True)
End Set
End Property
答案 0 :(得分:0)
下面是相关的其他代码,但没关系..我通过将Autosize
的{{1}}属性设置为_controlHost
来修复此问题。我将其设置为False
以显示列表中的所有项目(无需定义最大下拉列表)但由于某种原因,当True
设置为DrawMode
时,它的行为会有所不同
OwnerDraw