Bonjour à tous,
J'ai un petit problème avec une liste déroulante me servant à afficher une liste de couleur, avec un rectangle affichant la couleur. L'affichage de la liste se fait très bien, mais quand je sélectionne un élément, le combo affiche ceci "Color [LimeGreen]" ... j'ai essayé de redessiner le rectangle (sur l'évén. SelectIndexChanged par ex.) après la sélection, mais rien ne marche...
Voici le code sur la liste déroulante :
'Sur le form load, je charge la liste
Private Sub frmSettings_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim ColorName As String
For Each ColorName In _
System.Enum.GetNames _
(GetType(System.Drawing.KnownColor))
ComboBox1.Items.Add(Color.FromName(ColorName))
Next
End Sub
'Dessine les rectangles et les noms de couleurs dans la liste
Private Sub ComboBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ComboBox1.DrawItem
If e.Index < 0 Then
e.DrawBackground()
e.DrawFocusRectangle()
Exit Sub
End If
'Obtenir la couleur à partir de l'élément de la liste
Dim aColor As Color = _
CType(ComboBox1.Items(e.Index), Color)
'Obtenir un rectangleheight
Dim rect As Rectangle = New Rectangle _
(2, e.Bounds.Top + 2, e.Bounds.Height, _
e.Bounds.Height - 4)
Dim br As Brush
e.DrawBackground()
e.DrawFocusRectangle()
If e.State = _
Windows.Forms.DrawItemState.Selected Then
br = Brushes.White
Else
br = Brushes.Black
End If
'Dessiner un rectangle et le remplir
e.Graphics.DrawRectangle(New Pen(aColor), rect)
e.Graphics.FillRectangle(New SolidBrush _
(aColor), rect)
'Dessiner une bordure
rect.Inflate(1, 1)
e.Graphics.DrawRectangle(Pens.Black, rect)
'Dessiner le nom de la couleur
e.Graphics.DrawString(aColor.Name, _
cboChatSend.Font, br, e.Bounds.Height + 5, _
((e.Bounds.Height - cboChatSend.Font.Height) _
\ 2) + e.Bounds.Top)
End Sub
Private Sub ComboBox1_MeasureItem(ByVal sender As Object, ByVal e As System.Windows.Forms.MeasureItemEventArgs) Handles ComboBox1.MeasureItem
e.ItemHeight = 16
End Sub
Merci à l'avance
J