Как установить цвет фона для определенного элемента в System.Windows.Forms.ListBox? Я хотел бы иметь возможность установить несколько, если это возможно.Цвет фона элемента ListBox (winforms)
ответ
Вероятно, единственный способ добиться этого - нарисовать предметы самостоятельно.
Установите DrawMode
в OwnerDrawFixed
и код что-то вроде этого на мероприятии DrawItem:
private void listBox_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
Graphics g = e.Graphics;
g.FillRectangle(new SolidBrush(Color.Silver), e.Bounds);
// Print text
e.DrawFocusRectangle();
}
Второй вариант будет использовать в ListView, хотя они имеют другой способ реализации (не действительно данные связанный, но более гибкий по сравнению с колоннами)
// Set the background to a predefined colour
MyListBox.BackColor = Color.Red;
// OR: Set parts of a color.
MyListBox.BackColor.R = 255;
MyListBox.BackColor.G = 0;
MyListBox.BackColor.B = 0;
Если вы имеете в виду, установив несколько backgroun г цвета устанавливает цвет фона для каждого элемента, это не представляется возможным с ListBox, но с ListView, с чем-то вроде:
// Set the background of the first item in the list
MyListView.Items[0].BackColor = Color.Red;
Спасибо за answer by Grad van Horck, он вел меня в правильном направлении ,
Для поддержки текста (а не только цвет фона) вот мой полностью рабочий код:
//global brushes with ordinary/selected colors
private SolidBrush reportsForegroundBrushSelected = new SolidBrush(Color.White);
private SolidBrush reportsForegroundBrush = new SolidBrush(Color.Black);
private SolidBrush reportsBackgroundBrushSelected = new SolidBrush(Color.FromKnownColor(KnownColor.Highlight));
private SolidBrush reportsBackgroundBrush1 = new SolidBrush(Color.White);
private SolidBrush reportsBackgroundBrush2 = new SolidBrush(Color.Gray);
//custom method to draw the items, don't forget to set DrawMode of the ListBox to OwnerDrawFixed
private void lbReports_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
bool selected = ((e.State & DrawItemState.Selected) == DrawItemState.Selected);
int index = e.Index;
if (index >= 0 && index < lbReports.Items.Count)
{
string text = lbReports.Items[index].ToString();
Graphics g = e.Graphics;
//background:
SolidBrush backgroundBrush;
if (selected)
backgroundBrush = reportsBackgroundBrushSelected;
else if ((index % 2) == 0)
backgroundBrush = reportsBackgroundBrush1;
else
backgroundBrush = reportsBackgroundBrush2;
g.FillRectangle(backgroundBrush, e.Bounds);
//text:
SolidBrush foregroundBrush = (selected) ? reportsForegroundBrushSelected : reportsForegroundBrush;
g.DrawString(text, e.Font, foregroundBrush, lbReports.GetItemRectangle(index).Location);
}
e.DrawFocusRectangle();
}
выше добавляет к данному коду и покажет правильный текст плюс выделение выбранного пункта.
public Picker()
{
InitializeComponent();
this.listBox.DrawMode = DrawMode.OwnerDrawVariable;
this.listBox.MeasureItem += listBoxMetals_MeasureItem;
this.listBox.DrawItem += listBoxMetals_DrawItem;
}
void listBoxMetals_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
Brush myBrush = Brushes.Black;
var item = listBox.Items[e.Index] as Mapping;
if (e.Index % 2 == 0)
{
e.Graphics.FillRectangle(new SolidBrush(Color.GhostWhite), e.Bounds);
}
e.Graphics.DrawString(item.Name,
e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
e.DrawFocusRectangle();
}
Полный образец
private void listbox1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{
e.DrawBackground();
Brush myBrush = Brushes.Black;
var item = listbox1.Items[e.Index];
if(e.Index % 2 == 0)
{
e.Graphics.FillRectangle(new SolidBrush(Color.Gold), e.Bounds);
}
e.Graphics.DrawString(((ListBox)sender).Items[e.Index].ToString(),
e.Font, myBrush,e.Bounds,StringFormat.GenericDefault);
e.DrawFocusRectangle();
}
public MainForm()
{
InitializeComponent();
this.listbox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listbox1_DrawItem);
}
- 1. Динамический цвет фона элемента управления Silverlight (Listbox)
- 2. Winforms - Listbox - MouseHover - Цвет деталя
- 3. изменить цвет фона элемента списка ListBox в момент привязки
- 4. Listbox пользовательских выбранный цвет фона - InvalidArgument
- 5. ListBox выделенный элемент цвет фона
- 6. Listbox WPF элемент цвет фона
- 7. Диаграмма Winforms: как включить цвет фона цвет
- 8. Изменить цвет фона для выбранного элемента списка ListBox
- 9. Как изменить цвет фона элемента управления вкладками в Winforms?
- 10. Цвет фона элемента tspan
- 11. Изменить цвет фона элемента?
- 12. Animate XAML ListBox товара Цвет фона
- 13. Изменить цвет фона выбранного элемента в списке
- 14. WPF - Цвет фона в ListBox - CodeBehind
- 15. Изменить ListBox Item Цвет фона программно
- 16. Настройка фона WinForm ListBox
- 17. Цвет фона в сетке devexpress - сетка winforms
- 18. listbox selected values (winforms)
- 19. Как изменить цвет фона элемента?
- 20. asp.net ListBox против WinForms ListBox
- 21. Как установить цвет переднего плана элемента ListBox
- 22. ValueConverter для фона Цвет
- 23. Невозможно очистить Winforms-ListBox
- 24. Winforms Binding to ListBox
- 25. Измените цвет отдельных элементов ListBox в Powershell (Winforms)
- 26. Как изменить цвет фона выбранного элемента в Windows Phone?
- 27. Связывание фона конкретного элемента ListBox с определенным значением
- 28. Изменение свойства цвет фона элемента списка с помощью привязки данных
- 29. изменить цвет фона элемента p при касании
- 30. Изменить цвет фона элемента тела внутри фрейма
Это возможно с ListBox. См. Http://stackoverflow.com/questions/91747/background-color-of-a-listbox-item-winforms#91758 – jfs 2008-09-18 11:35:44
s/возможно/просто /. Ну что ж. C# 1, новичок 0. Я не много работал с перегрузкой методов рисования раньше. – 2008-09-18 11:38:30