¿Cómo puedo establecer el color de fondo de un elemento específico en System.Windows.Forms.ListBox? Me gustaría poder establecer varios si es posible.Color de fondo de un elemento ListBox (winforms)
Respuesta
Probablemente la única manera de lograr eso es dibujar los elementos usted mismo.
Ajuste el DrawMode
a OwnerDrawFixed
y el código de algo como esto en el caso 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();
}
La segunda opción sería utilizar un ListView, aunque tienen otro modo de implementaciones (no realmente los datos encuadernado, pero más flexible en forma de columnas)
// 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;
Si lo que quiere decir mediante el establecimiento de múltiples backgroun colores d está fijando un color de fondo diferente para cada elemento, esto no es posible con un cuadro de lista, pero es con un ListView, con algo como:
// Set the background of the first item in the list
MyListView.Items[0].BackColor = Color.Red;
Gracias por la answer by Grad van Horck, que me guió en la dirección correcta .
para que admita texto (no sólo el color de fondo) aquí está mi código totalmente funcional:
//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();
}
Lo anterior se suma al código dado y mostrará el texto propiamente dicho, más destacado elemento seleccionado.
Excelente, el bit seleccionado fue muy útil. – Almo
¿Qué son reportsForegroundBrushSelected: reportsForegroundBrush ?? –
reportsForegroundBrushSelected: reportsForegroundBrush me da error, se supone que deben ser declarados, pero ¿cómo? –
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();
}
muestra completa
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. WPF Color de selección ListBox
- 2. Cambiar el color de fondo para el elemento de ListBox seleccionado
- 3. Winforms, databinding, Listbox y textbox
- 4. Color de fondo del elemento tspan
- 5. javascript establecer elemento color de fondo
- 6. Winforms - Cómo evitar la selección del elemento Listbox
- 7. C color de fondo # WinForms DataGridView haciendo demasiado lento
- 8. Color de fondo del elemento seleccionado en un editable JComboBox
- 9. ¿Quitar elemento de ListBox?
- 10. Color de fondo de elemento de ListViews variable
- 11. cambiar el color de fondo del elemento de navegación (barra)
- 12. Cambiar el color de las barras de desplazamiento de un ListBox en Windows Phone 7
- 13. jQuery validar el cambio de color del fondo del elemento
- 14. WinForms: color DataGridView border
- 15. Color de fondo UIWebView
- 16. navigationbar (color de fondo)
- 17. NSImageView + Color de fondo
- 18. Establecer un color de fondo para un elemento de ListView seleccionado en android
- 19. WinForms ListBox Haga clic con el botón derecho
- 20. Color de fondo de UIView
- 21. WPF: ¿cómo manejo un clic en un elemento de ListBox?
- 22. HTML: cómo establecer el color de fondo del elemento en el elemento de selección
- 23. ¿Separación de color de fondo y opacidad?
- 24. ¿Cómo cambio el color de fondo del control de pestañas en Winforms?
- 25. cambio de color de fondo
- 26. Forma de colorear partes de la línea Listbox/ListView en C# WinForms?
- 27. Color de fondo CSS en JavaScript
- 28. C#: cambiar el color de la fila del listbox?
- 29. Redirigir la salida de la consola a winforms ListBox
- 30. Animar elemento eliminado en Listbox
Es posible con un ListBox. Consulte http://stackoverflow.com/questions/91747/background-color-of-a-listbox-item-winforms#91758 – jfs
s/possible/easy /. Oh bien. C# 1, novato 0. No he trabajado mucho con la sobrecarga de los métodos de pintura. –
el BackColor no es una propiedad de la opción 'ListBox.ObjectCollection' – ghiboz