Страница: 1 |
|
Вопрос: Как вставить в ComboBox системные цвета
|
Добавлено: 06.07.04 15:15
|
|
Автор вопроса: Oleg K
|
Привет всем!
VB.NET 2003
Пытаюсь вставить в ComboBox спсиок системных цветов:
Dim kColor As KnownColor
For kColor = KnownColor.AliceBlue To KnownColor.YellowGreen
ComboBoxItemColor.Items.Add(kColor)
Next
Список в "комбике" есть, но надо еще чтобы было видно реальный цвет - цветное представление рядом с наименованием цвета.
По этой ссылке:
http://www.vbaccelerator.com/home/NET/Code/Controls/ListBox_and_ComboBox/Reusing_the_Combo_Dropdown/article.asp
есть прекрасный пример, того что мне надо, но исполнен на C# (с исходниками), как я не пытался реализовать тоже самое на VB.NET ничего у меня не получилось. Кроме списка в "комбике" я ничего не увидел.
Кто сталкивался с такой задачей, подскажите пожалуйста решение.
Ответить
|
Номер ответа: 4 Автор ответа: Oleg K
Вопросов: 15 Ответов: 72
|
Профиль | | #4
|
Добавлено: 07.07.04 23:29
|
Спасибо Всем!
Благодаря доброму человеку "Peter Fleischer" (из форума RSDN - http://www.rsdn.ru/Users/Profile.aspx?uid=28181) проблема решена.
Цитата: =================================
Побробуй этот вариант:
 im names() As String
 im values As Array
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
names = [Enum].GetNames(GetType(System.Drawing.KnownColor))
values = [Enum].GetValues(GetType(System.Drawing.KnownColor))
 im i As Integer
With ComboBox1
.DrawMode = DrawMode.OwnerDrawFixed
AddHandler .DrawItem, AddressOf PaintColor
For i = 0 To names.Length - 1
.Items.Add(String.Format("{0} = {1}", names(i), CInt(values.GetValue(i))))
Next
End With
End Sub
Private Sub PaintColor(ByVal sender As Object, ByVal e As DrawItemEventArgs)
 im g As Graphics = e.Graphics
e.DrawBackground()
 im rectangle As Rectangle = New Rectangle(2, e.Bounds.Top + 2, _
e.Bounds.Height, e.Bounds.Height - 4)
e.Graphics.FillRectangle(New SolidBrush(System.Drawing.Color.FromName(names(e.Index))), rectangle)
e.Graphics.DrawString(names(e.Index), e.Font, System.Drawing.Brushes.Black, _
New RectangleF(e.Bounds.X + rectangle.Width, e.Bounds.Y, _
e.Bounds.Width, e.Bounds.Height))
e.DrawFocusRectangle()
End Sub
Peter
Конец цитаты ======================
Две конструкции решили вопрос полностью. Заметьте, не пять классов + контрол + API как в примере по моей ссылке (см. выше).
Конечно чуток под свои требования подправить пришлось, но всего лишь в координатах rectangle.
С уважением
Oleg K
Ответить
|
Страница: 1 |
Поиск по форуму