Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 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) проблема решена.

Цитата: =================================
Побробуй этот вариант:

  ;Dim names() As String
  ;Dim 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))
    ;Dim 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)
    ;Dim g As Graphics = e.Graphics
    e.DrawBackground()
    ;Dim 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 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам