Форум: "Начинающим";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];
ВнизА можно ли цменить свет(стиль) прокрутки ListBox ??? Найти похожие ветки
← →
XTD © (2006-06-07 12:36) [0]Такой вопрос ...
← →
XTD © (2006-06-07 12:57) [1]Ответ
ListBox нужно перевести в режим owner draw и "вручную" рисовать текст строки и линию под ней. Для этого нужно выставить свойство ListBox.DrawMode в значение DrawMode.OwnerDrawFixed и подписаться на событие ListBox.DrawItem, в котором и производить отрисовку.
Пример ниже выводит в ListBox значения цветов из класса Color и разделяет строки линией, цвет которой совпадает с именем цвета элемента ListBox"a. Исключительно в демонстрационных целях стиль линии выбирается случайным образом из доступных в перечислении DashStyle:
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Reflection;
class MyForm: Form
{
//Массив стилей Pen"a для каждой строки ListBox"a
readonly DashStyle[] dashStyles;
public MyForm()
{
ListBox listBox = new ListBox();
listBox.DrawMode = DrawMode.OwnerDrawFixed;
listBox.DrawItem += new DrawItemEventHandler(OnDrawListBoxItem);
listBox.Parent = this;
listBox.Dock = DockStyle.Fill;
//Заполняем ListBox именами цветов, содержащихся как свойства в классе Color
foreach(PropertyInfo propertyInfo in typeof(Color).GetProperties(BindingFlags.Static | BindingFlags.Public))
listBox.Items.Add(propertyInfo.Name);
//Заполнение массива dashStyles случайными значениями из возможных стилей
Random random = new Random(DateTime.Now.Millisecond);
dashStyles = new DashStyle[listBox.Items.Count];
Array possibleStyles = Enum.GetValues(typeof(DashStyle));
for (int index = 0; index < dashStyles.Length; index ++)
dashStyles[index] = (DashStyle)possibleStyles.GetValue(random.Next(possibleStyles.Length));
}
void OnDrawListBoxItem(object sender, DrawItemEventArgs e)
{
ListBox listBox = sender as ListBox;
//Рисуем выделенную строку
if ((e.State & DrawItemState.Selected) != 0)
e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds);
else
e.Graphics.FillRectangle(Brushes.White, e.Bounds);
string itemText = listBox.Items[e.Index].ToString();
Color color = Color.FromName(itemText);
//Рисуем строку
e.Graphics.DrawString(itemText, Font, new SolidBrush(color), e.Bounds);
Pen pen = new Pen(color);
pen.DashStyle = dashStyles[e.Index];
//Рисуем линию под строкой
e.Graphics.DrawLine(pen, e.Bounds.X, e.Bounds.Bottom - 1, e.Bounds.Right, e.Bounds.Bottom - 1);
}
static void Main()
{
Application.Run(new MyForm());
}
}
← →
XTD © (2006-06-07 13:00) [2]Это на Си. На Делфи сами переводите
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.015 c