绘制列表框的宽度?

时间:2013-09-11 08:10:26

标签: vb.net properties user-controls combobox listbox

我创建了一个自定义组合框,它使用列表框控件的自定义实例作为下拉菜单。

为了自定义列表框的选择突出显示,我不得不将其'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

1 个答案:

答案 0 :(得分:0)

下面是相关的其他代码,但没关系..我通过将Autosize的{​​{1}}属性设置为_controlHost来修复此问题。我将其设置为False以显示列表中的所有项目(无需定义最大下拉列表)但由于某种原因,当True设置为DrawMode时,它的行为会有所不同

OwnerDraw