Цвет фона элемента ListBox (winforms)

Как установить цвет фона для определенного элемента в System.Windows.Forms.ListBox? Я хотел бы иметь возможность установить несколько, если это возможно.

Вероятно, единственный способ добиться этого – рисовать предметы самостоятельно.

Установите 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, хотя у них есть другой способ реализации (не связанный с данными, а более гибкий в виде столбцов)

Спасибо за ответ Града ван Хорка , он вел меня в правильном направлении.

Для поддержки текста (а не только цвета фона) вот мой полностью рабочий код:

 //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(); } 

Вышеприведенное добавляет к данному коду и отображает правильный текст плюс выделение выбранного элемента.

 // 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; 

Если вы задаете несколько цветов фона, задайте другой цвет фона для каждого элемента, это невозможно в ListBox, но IS с ListView, с чем-то вроде:

 // Set the background of the first item in the list MyListView.Items[0].BackColor = Color.Red; 
  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); } 
  • Алгоритм добавления смешанного цвета для значений RGB
  • Убедитесь, что UIColor темный или яркий?
  • Есть ли простой способ сравнить, насколько близки два цвета друг к другу
  • Несколько цветов переднего плана в PowerShell по одной команде
  • Использование цвета и color.darker в Android?
  • Изменение оттенка цвета RGB
  • Преобразование значений RGB в название цвета
  • Последующее наблюдение: поиск точного «расстояния» между цветами
  • Как использовать 3-значные цветовые коды, а не 6-значные цветовые коды в CSS?
  • Как рассчитать цвет RGB, указав альфа-смешение?
  • Преобразование строки в цвет в Java
  • Давайте будем гением компьютера.