Страница: 1 |
Страница: 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
Номер ответа: 1
Автор ответа: Артём Л.
ICQ: 280044491
Вопросов: 43
Ответов: 227
Профиль | | #1
Добавлено: 07.07.04 10:49
а какой там способ советуют не через DrawItem случайно?
Номер ответа: 2
Автор ответа: Vah V
Вопросов: 3
Ответов: 9
Профиль | | #2
Добавлено: 07.07.04 11:27
В VB.NET есть утилита, конвертирует C# -> VB.NET
Конвертни, нормально получается, правда немного надо будет поправить...
Номер ответа: 3
Автор ответа: Oleg K
Вопросов: 15
Ответов: 72
Профиль | | #3
Добавлено: 07.07.04 23:20
Пробовал я эти конвертилки.
Да нет так как проходит эта "косноязычная" конвертация, то это трата времени. После них (конвертаций) надо еще вкуривать и в C# и в VB решения искать. Не годится.
Вот на С# работающий код:
else if( color == Color.FloralWhite )
{
strColorName = "Floral White";
}
а сконвертило оно так:
If color = Color.FloralWhite Then '
strColorName = "Floral White"
End If
И ЭТО ОШИБКА. И будешь ты ее искать днями.
А оказывается надо было вот так:
If Color.Equals(Color.FloralWhite) Then '
strColorName = "Floral White"
End If
И работает. Так вот такого кода после конвертации, ну просто не в проворот. И кому надо такие конвертации. А если еще API подмешано, то считай пропало.
Номер ответа: 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