我有一个组合框控件,我将其设置为“下拉列表”样式(因为我不希望用户能够在组合框中键入文本)。可能只是因为我不喜欢“下拉列表”样式的样子,所以我试图将它改为外观,就像正常的组合框样式一样。
所以我将绘制模式设置为“owner draw fixed”。我的目标是为没有悬停的组合框项目设置白色背景/黑色文本,并为悬停在其上的项目设置蓝色背景/白色文本(就像普通的组合框一样)。
背景颜色正常工作,但文字颜色不是(文字保持黑色,即使是悬停在上面的项目)。
这是我的代码......
Private Sub ComboBox1_DrawItem_1(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem
Dim TextBrush As Brush
If (e.State And DrawItemState.HotLight) = DrawItemState.HotLight Then
TextBrush = Brushes.White
Else
TextBrush = Brushes.Black
End If
Dim index As Integer = If(e.Index >= 0, e.Index, 0)
e.DrawBackground()
e.Graphics.DrawString(ComboBox1.Items(index).ToString(), e.Font, TextBrush, e.Bounds, StringFormat.GenericDefault)
e.DrawFocusRectangle()
End Sub
有什么想法吗?
我一直在谷歌搜索解决方案几个小时,但到目前为止没有运气。
答案 0 :(得分:2)
e.State
是一个标志集。它的值由OR
标志值组成。因此,您需要使用If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
,而不是观察到的785
值。
true == 785 == (Selected OR Focus OR NoAccelerator OR NoFocusRect)
如果删除NoFocusRect
,整数值将会改变,但位掩码仍将包含Selected
的值。
答案 1 :(得分:1)
检查以下两个链接:
答案 2 :(得分:1)
这是我如何更改组合框的选定背景颜色和选择文本forecolor
Private Sub ComboBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem
'create custom color and brush for selection color
Dim myColor As Color
Dim myBrush As Brush
myColor = Color.FromArgb(231, 199, 100)
myBrush = New SolidBrush(myColor)
If e.Index < 0 Then Exit Sub
Dim rect As Rectangle = e.Bounds
Dim TextBrush As Brush
Dim index As Integer = If(e.Index >= 0, e.Index, 0)
If e.State And DrawItemState.Selected Then
'selection background color
e.Graphics.FillRectangle(myBrush, rect)
'selection forecolor
TextBrush = Brushes.Black
e.Graphics.DrawString(ComboBox1.Items(index).ToString(), e.Font, TextBrush, e.Bounds, StringFormat.GenericDefault)
Else
e.Graphics.FillRectangle(Brushes.Black, rect)
TextBrush = Brushes.White
e.Graphics.DrawString(ComboBox1.Items(index).ToString(), e.Font, TextBrush, e.Bounds, StringFormat.GenericDefault)
End If
End Sub