Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Можно ли в Listboxe сделать, чтобы Itemы были


Автор: Naum 13.7.2006, 14:58
Можно ли в Listboxe сделать, чтобы Itemы были разного цвета? Если можно, то как? 

Автор: arilou 14.7.2006, 22:39
Поковыряйся тут: http://vbaccelerator.com/home/NET/Code/Controls/ListBox_and_ComboBox/index.asp 

Автор: DarkDragon 19.8.2006, 17:38
Конечно можно!!!

ListBox это наследуемый класс, т. е. его можно наследовать. Далее мы можем модернизировать этот класс.
Если мы это сделаем мы можем получить внутри класса защищенные методы. У ListBox'а есть 2 случая(Event)
1 - DrawItem (защищенный метод Protected Overrides Sub OnDrawItem), 2 - MeasureItem (Prot. Over. Sub OnMeasureItem). Ну их можно получить и не наследуя данного класса, просто добавить к реальному ListBox'у
два этих случая.

1 метод это то что будет рисовать лист бокс. 2 метод это то что, какой размер будет у Item'ов.
Вот маленький примерчик:

Class ModernListBox
    Inherits ListBox

    Sub New()

    End Sub

    Dim curclr As Color
    Dim brsh As SolidBrush
    Protected Overrides Sub OnDrawItem(ByVal e As DrawItemEventArgs)
        If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
            e.Graphics.FillRectangle(Brushes.Black, e.Bounds)
            e.Graphics.DrawString(Items.Item(e.Index), Font, Brushes.White, e.Bounds.X + 2, e.Bounds.Y + 1)
        Else
            e.Graphics.FillRectangle(brsh, e.Bounds)
            e.Graphics.DrawString(Items.Item(e.Index), Font, Brushes.Black, e.Bounds.X + 2, e.Bounds.Y + 1)
        End If
    End Sub

    Protected Overrides Sub OnMeasureItem(ByVal e As MeasureItemEventArgs)
        e.ItemWidth = Width
        e.ItemHeight = Font.Height + 2
    End Sub
End Class

Вот теперь ЛистБокс будет рисовать то что мы указали ему в методе OnDrawItem()
Не забудь у данного класса поставить DrawMode = Variable

ModernListBox.DrawMode = Vairable.
Теперь остается немного подумать и доделать мой код. Если не справишься пиши на uzsartur@mail.ru, постараюсь помочь!

Автор: Exception 19.8.2006, 19:18
1) Пожалуйста, пользуйтесь тегами [ code = vb ] [ / code ] для подсветки кода!
2) Не стоит поднимать темы, которым более двух недель. Всё равно автор наверняка сам решил проблему.
3) Надо бы в FAQ засунуть...

Автор: Naum 24.8.2006, 08:37
Цитата(Exception @  19.8.2006,  19:18 Найти цитируемый пост)
2) Не стоит поднимать темы, которым более двух недель. Всё равно автор наверняка сам решил проблему.



Exception, да решил. Но так проще.


DarkDragon, BR. Пасиб.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)