Я пытаюсь отобразить список цветов в поле со списком. Каждый элемент в поле содержит название цвета с суффиксом прямоугольника, заполненного соответствующим цветом, как показано в проекте здесь .
Проект написан в c#. Я не понимаю c#, поэтому преобразовал коды в vb. net, как показано ниже.
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Dim ColorList As ArrayList = New ArrayList()
Dim colorType As Type = GetType(System.Drawing.Color)
Dim propInfoList As PropertyInfo() = colorType.GetProperties(BindingFlags.[Static] Or BindingFlags.DeclaredOnly Or BindingFlags.[Public])
For Each c As PropertyInfo In propInfoList
ComboBox1.Items.Add(c.Name)
Next
End Sub
Private Sub Combobox1_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs) Handles ComboBox1.DrawItem
Dim g As Graphics = e.Graphics
Dim rect As Rectangle = e.Bounds
If e.Index >= 0 Then
Dim n As String = (CType(sender, ComboBox)).Items(e.Index).ToString()
Dim f As Font = New Font("Arial", 9, FontStyle.Regular)
Dim c As Color = Color.FromName(n)
Dim b As Brush = New SolidBrush(c)
g.DrawString(n, f, Brushes.Black, rect.X, rect.Top)
g.FillRectangle(Brushes.Blue, rect.X + 110, rect.Y + 5, rect.Width - 10, rect.Height - 10)
End If
End Sub
Когда я выполняю приведенный выше код, в поле со списком Combobox1
отображаются элементы только с названиями цвета. Цветные прямоугольники не отображаются так, как показано в проекте, который я привел выше.
Почему прямоугольники не отображаются?
Я пробовал установить Combobox1
s DrawMode
для всех доступных DrawModes. Ничего не сработало.
Обратите внимание: я использовал преобразователь кода Telerik , чтобы преобразовать код c# в vb. net код.