- •Лабораторная работа №4 работа со списками в windows-приложениях Работа со списками в ListBox
- •Операции над списками ListBox
- •Добавление строк в ListBox
- •Доступ к строкам в ListBox
- •Удаление пунктов из списка
- •Изменяем цвет и шрифт пунктов списка
- •Загрузка ListBox из файлов
- •Работа со списками в ComboBox Основные свойства ComboBox
- •Операции над списками в ComboBox Добавление строк в ComboBox
- •Доступ к строкам в ComboBox
- •Изменяем цвет пунктов списка
- •Загрузка ComboBox из файлов
- •Возможности выделения в ListBox и ComboBox
- •Особенности использования контрола CheckedListBox
- •Задание к лабораторной работе.
Изменяем цвет пунктов списка
Зададим глобально
public partial class Form1 : Form
{
private string[] sGrade;
......
В обработчике события нажатия кнопки 1 пишем код инициализации списка
private void toolStripButton1_Click(object sender, EventArgs e)
{
//Разрешаем событие DrawItem
comboBox1.DrawMode =
System.Windows.Forms.DrawMode.OwnerDrawVariable;
//Ширина списка
comboBox1.DropDownWidth = 300;
//Стиль DropDownStyl для рисунка 3 слева
comboBox1.DropDownStyle = ComboBoxStyle.Simple;
//Стиль DropDownStyl для рисунка 3 права
comboBox1.DropDownStyle = ComboBoxStyle.DropDown;
sGrade = new string[]{"Отлично", "Хорошо",
"Удовлетворительно","Неудовлетворительно"};
//устанавливаем данные
comboBox1.DataSource = sGrade;
}
Так как DrawMode =OwnerDrawVariable, то мы можем выполнить перерисовку по своему усмотрению содержимого ComboBox, как это уже делалось выше. Создаем событие для ComboBox comboBox1_DrawItem, в котором и отображаем пункты требуемыми цветами и шрифтами:
private void comboBox1_DrawItem(object sender,
System.Windows.Forms.DrawItemEventArgs e)
{
float fSize = 0;
System.Drawing.Font font;
FontFamily fontfamily = null;
System.Drawing.Color сolor = new System.Drawing.Color();
//В зависимости от прорисовываемого пункта меняем параметры шрифта
switch(e.Index)
{
case 0:
size = 30;
сolor = System.Drawing.Color.Red;
fontfamily = FontFamily.GenericSansSerif;
break;
case 1:
size = 25;
сolor = System.Drawing.Color.Orange;
fontfamily = FontFamily.GenericMonospace;
break;
case 2:
size = 20;
сolor = System.Drawing.Color.Purple;
fontfamily = FontFamily.GenericSansSerif;
break;
case 3:
size = 15;
сolor = System.Drawing.Color.Blue;
fontfamily = FontFamily.GenericSerif;
break;
}
// Рисуем фон и, таким образом, очищаем поле
e.DrawBackground();
// Рисуется квадрат, заполненный различными цветами
//Величина квадрата базируется на длине имени пункта
Rectangle rectangle = new Rectangle(2,e.Bounds.Top+2,
e.Bounds.Height, e.Bounds.Height-4);
//Рисуем эллипс слева от пункта
e.Graphics.FillEllipse(new SolidBrush(сolor),rectangle);
//Можно нарисовать квадратик
//e.Graphics.FillRectangle(new SolidBrush(animalColor),rectangle);
// Пишем строку заданны шрифтом
font = new Font(fontfamily, size, FontStyle.Bold);
e.Graphics.DrawString(sGrade[e.Index],font,
System.Drawing.Brushes.Black,
new RectangleF(e.Bounds.X+rectangle.Width,e.Bounds.Y,
e.Bounds.Width, e.Bounds.Height));
// Селекция при нахождении мышки над пунктом списка
e.DrawFocusRectangle();
}
И в завершение необходимо сообщить Windows размеры пунктов - для этого создадим для контрола обработчик события MeasureItem, который при стиле OWNERDRAWVARIABLE вызывается при отрисовки каждого элемента в списке (иначе только один раз).
private void comboBox1_MeasureItem(object sender,
System.Windows.Forms.MeasureItemEventArgs e)
{
switch(e.Index)
{
case 0:
e.ItemHeight = 40;
break;
case 1:
e.ItemHeight = 35;
break;
case 2:
e.ItemHeight = 30;
break;
case 3:
e.ItemHeight = 25;
break;
}
e.ItemWidth = 300;
}
Результат выполнения показан на Рис.4.
Рис.4. Изменения цвета и шрифтов пунктов списков