Как изменить цвет одной ячейки в ObjectListView?
ЭТО НЕ ПРОСТОЙ СПИСОК! Я хочу создать приложение Windows Forms в C#. Но у меня есть некоторые проблемы с ObjectListView. Я хочу изменить цвет одной конкретной ячейки в списке объектов, но я могу изменить цвет только одной строки. это мой список объектов: скриншот
там вы можете увидеть столбец "Очередь" и есть значение "Allgemein", и я хочу покрасить все эти значения с "Allgemein" в этом столбце красным, но не всей строкой.
Я изменил с этим кодом цвет строки:
objectListView1.Items[0].BackColor = Color.Red;
3 ответа
Я думаю, что то, что вы пытаетесь сделать, хорошо объяснено в этой кулинарной книге ObjectListView.
На всякий случай, если это кому-то нужно, если вы хотите изменить цвет всего столбца (не заголовка), используйте украшение.
Есть класс TintColumnDecoration
Используется по умолчанию в OLV для тонирования отсортированного столбца, но вы можете настроить его:
Dim MyTint= New TintedColumnDecoration(YourColumn)
MyTint.Tint = Color.FromArgb(50, Color.LightGreen)
OLV.AddDecoration(MyTint)
С http://objectlistview.sourceforge.net/
Событие CellEditStarting инициируется после того, как пользователь запросил редактирование ячейки, но до того, как на экране появится редактор ячейки.
Это событие передает объект CellEditEventArgs обработчикам событий. Если в e.Cancel установлено значение True в обработчике этого события, операция редактирования ячейки не начнется. Если вы не отмените операцию редактирования, вам наверняка захочется поиграть со свойством Control элемента CellEditEventArgs.
Вы можете использовать это, чтобы настроить редактор по умолчанию или полностью заменить его. Например, если ваш ObjectListView показывает цвет в ячейке, нет редактора по умолчанию для обработки цвета. Вы можете создать свой собственный ColorCellEditor, правильно его настроить, а затем установить свойство Control в качестве редактора цветовых ячеек. ObjectListView будет затем использовать этот элемент управления, а не по умолчанию. Если вы сделаете это, вы должны полностью сконфигурировать свой элемент управления, так как ObjectListView больше не будет конфигурировать редактор. Итак, чтобы прослушать событие, вы должны сделать что-то вроде этого:
this.myObjectListView.CellEditStarting += new CellEditEventHandler(this.HandleCellEditStarting);
И ваш метод-обработчик может выглядеть примерно так:
private void HandleCellEditStarting(object sender, CellEditEventArgs e) {
if (e.Value is Color) {
ColorCellEditor cce = new ColorCellEditor();
cce.Bounds = e.CellBounds;
cce.Value = e.Value;
e.Control = cce;
}
}
С этим кодом ваш spiffy ColorCellEditor будет отображаться всякий раз, когда пользователь пытается отредактировать цвет в вашем ObjectListView.