Отправляет email-рассылки с помощью сервиса Sendsay

Статьи по Visual Basic.NET

  Все выпуски  

Статьи по Visual Basic.NET Создание пользовательского списка


Информационный Канал Subscribe.Ru

В начало Ozon.ru
  Главная | Новости | Статьи | Каталог | Софт | Регистрация | Поиск

Новые статьи

1. Как убрать значок выполняемого приложения из строки состояния Windows
2. Алгоритм Кнута-Морриса-Пратта
3. Задание фонового рисунка его прорисовкой
4. Двойная буферизация
5. Переопределение событий
6. Создание многопоточного приложения в VB.NET

Свежие компьютерные новости

13.12.2005 IDC предсказывает снижение темпов роста рынка ПК
13.12.2005 Полуторакилограммовый субноутбук Asus U5A
13.12.2005 Кадр дня: Концепт-компьютеры на базе Windows
13.12.2005 Nokia представила SDK для разработки игр
13.12.2005 На Mail.Ru открылась автомобильная барахолка
13.12.2005 Intel и BMW подписали партнёрское соглашение
13.12.2005 Бритни Спирс возглавила рейтинг запросов Yahoo

Создание пользовательского списка

Автор: Ковязин Дмитрий

Если установить значение свойства DrawMode списка равным DrawMode.OwnerDrawVariable, обрабатывая события MeasureItem и DrawItem, генерируемые при задании размеров и прорисовки элементов списка, можно перерисовать все изображение списка. В следующем примере создаётся список, у которого текст каждого элемента имеет свой цвет, фон элементов имеет цвет AliceBlue, а выбранный элемент выделяется контуром.

Public Class MyList
    Inherits System.Windows.Forms.ListBox

    Public Sub New()
        MyBase.New()
        MyBase.DrawMode = DrawMode.OwnerDrawVariable
    End Sub

    Protected Overrides Sub OnDrawItem(
                       ByVal e As System.Windows.Forms.DrawItemEventArgs)
        MyBase.OnDrawItem(e)
        e.DrawBackground()
        e.DrawFocusRectangle()
        Dim item As ListBoxItem
        Dim b As Rectangle = e.Bounds
        Dim rc As RectangleF = New RectangleF(b.X + 2, b.Y + 1, b.Width - 4, b.Height - 4)
        Dim sf As StringFormat = New StringFormat()
        sf.Alignment = StringAlignment.Near
        Dim fnt As Font = New Font("Verdana", 10, FontStyle.Bold, GraphicsUnit.Point)
        item = CType(MyClass.Items(e.Index), ListBoxItem)
        e.Graphics.FillRectangle(New SolidBrush(Color.AliceBlue), rc)
        e.Graphics.DrawString(item.text, fnt, New SolidBrush(item.ItemColor), rc, sf)
    End Sub

    Protected Overrides Sub OnMeasureItem(
                        ByVal e As System.Windows.Forms.MeasureItemEventArgs)
        e.ItemHeight = 20
    End Sub
End Class

Public Class ListBoxItem
    Private mText As String
    Private mColor As Color

    Public Sub New(ByVal text As String, 
                          ByVal theColor As Color)
        mText = text
        mColor = theColor
    End Sub

    Public Property text() As String
        Get
            Return mText
        End Get
        Set(ByVal Value As String)
            mText = Value
        End Set
    End Property

    Public Property ItemColor() As Color
        Get
            Return mColor
        End Get
        Set(ByVal Value As Color)
            mColor = Value
        End Set
    End Property
End Class

Для тестирования списка в код сгенерированный мастером проекта, добавьте следующий код:

Dim ml As MyList = New MyList()

Private Sub Form1_Load(ByVal sender As Object, 
                ByVal e As System.EventArgs) Handles MyBase.Load
        ml.SetBounds(20, 20, 100, 60)
        ml.Items.Add(New ListBoxItem("red", Color.Red))
        ml.Items.Add(New ListBoxItem("blue", Color.Blue))
        ml.Items.Add(New ListBoxItem("green", Color.Green))
        Me.Controls.Add(ml)
        AddHandler ml.SelectedIndexChanged, AddressOf ml_SelectedIndexChanged
End Sub

Private Sub ml_SelectedIndexChanged(ByVal s As Object, 
                                           ByVal e As EventArgs)
        Dim itm As ListBoxItem = CType(ml.SelectedItem, ListBoxItem)
        Me.BackColor = itm.ItemColor
End Sub

Скачать исходник можно здесь.




Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.visualbnet
Архив рассылки
Отписаться Вебом Почтой
Вспомнить пароль

В избранное