Вниз
Скачать: CL | DM;

А можно ли цменить свет(стиль) прокрутки 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.028 c
3-1146563364
D@Nger
2006-05-02 13:49
2006.06.25
запрет на редактирование в колонке DBGrid


2-1149569942
dera
2006-06-06 08:59
2006.06.25
Как "одним махом" очистить (удалить все записи) таблицу?


6-1140071742
Adriano
2006-02-16 09:35
2006.06.25
Получить доступ к сетевой карте


10-1121170006
SergP.
2005-07-12 16:06
2006.06.25
Работа с COM-объектом (EXCEL, WORD) из консольного приложения


15-1148970666
Antropoz
2006-05-30 10:31
2006.06.25
.Net remoting + COM




   Наверх