Principales respuestas
CAMBIO DE COLOR DE LOS DATOS CONTENIDO EN LISTBOX

Pregunta
-
Respuestas
-
Se necesita configurar el ListBox en modo "Owner Draw" y pintar los items usando Graphics.Drawstring con una brocha del color apropiado. Hay muchos ejemplos de ListBoxes con Owner Draw en la red, por ejemplo aquí:
http://csharphelper.com/blog/2014/11/make-an-owner-drawn-listbox-in-c/
https://www.fluxbytes.com/csharp/how-to-draw-listbox-items-with-alternative-background-colors/Puedes inspirarte en esos ejemplos para ver cómo llaman al DrawString, y cambiarle a dicha instrucción los parámetros para dibujar con los colores que tú quieras.
- Editado Alberto PoblacionMVP, Moderator sábado, 17 de febrero de 2018 16:33
- Propuesto como respuesta Pablo RubioModerator lunes, 19 de febrero de 2018 15:10
- Marcado como respuesta Pablo RubioModerator miércoles, 21 de febrero de 2018 22:27
-
Buenos días.
Según uno de los ejemplos que te dio Alberto Poblacion, solo deberías acomodarlo a lo que necesitas para comparar los valores de los items y cambiarle el color.
Prueba el siguiente código.
private void listBox1_DrawItem(object sender, DrawItemEventArgs e) { bool isSelected = ((e.State & DrawItemState.Selected) == DrawItemState.Selected); if (e.Index > -1) { //Buscar el valor de la lista string item = listBox1.Items[e.Index].ToString(); /* If the item is selected set the background color to SystemColors.Highlight or else set the color to either WhiteSmoke or White depending if the item index is even or odd */ Color color = isSelected ? SystemColors.Highlight : e.Index % 2 == 0 ? Color.WhiteSmoke : Color.White; //Comparar los valores color = Convert.ToInt32(item) <= 10 ? Color.Red : color; // Background item brush SolidBrush backgroundBrush = new SolidBrush(color); // Text color brush SolidBrush textBrush = new SolidBrush(e.ForeColor); // Draw the background e.Graphics.FillRectangle(backgroundBrush, e.Bounds); // Draw the text e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, textBrush, e.Bounds, StringFormat.GenericDefault); // Clean up backgroundBrush.Dispose(); textBrush.Dispose(); } e.DrawFocusRectangle(); }
Espero te sirva de ayuda.
Saludos.
- Propuesto como respuesta Pablo RubioModerator martes, 20 de febrero de 2018 16:10
- Marcado como respuesta Berroa0731 martes, 20 de febrero de 2018 23:00
Todas las respuestas
-
Se necesita configurar el ListBox en modo "Owner Draw" y pintar los items usando Graphics.Drawstring con una brocha del color apropiado. Hay muchos ejemplos de ListBoxes con Owner Draw en la red, por ejemplo aquí:
http://csharphelper.com/blog/2014/11/make-an-owner-drawn-listbox-in-c/
https://www.fluxbytes.com/csharp/how-to-draw-listbox-items-with-alternative-background-colors/Puedes inspirarte en esos ejemplos para ver cómo llaman al DrawString, y cambiarle a dicha instrucción los parámetros para dibujar con los colores que tú quieras.
- Editado Alberto PoblacionMVP, Moderator sábado, 17 de febrero de 2018 16:33
- Propuesto como respuesta Pablo RubioModerator lunes, 19 de febrero de 2018 15:10
- Marcado como respuesta Pablo RubioModerator miércoles, 21 de febrero de 2018 22:27
-
-
-
Buenos días.
Según uno de los ejemplos que te dio Alberto Poblacion, solo deberías acomodarlo a lo que necesitas para comparar los valores de los items y cambiarle el color.
Prueba el siguiente código.
private void listBox1_DrawItem(object sender, DrawItemEventArgs e) { bool isSelected = ((e.State & DrawItemState.Selected) == DrawItemState.Selected); if (e.Index > -1) { //Buscar el valor de la lista string item = listBox1.Items[e.Index].ToString(); /* If the item is selected set the background color to SystemColors.Highlight or else set the color to either WhiteSmoke or White depending if the item index is even or odd */ Color color = isSelected ? SystemColors.Highlight : e.Index % 2 == 0 ? Color.WhiteSmoke : Color.White; //Comparar los valores color = Convert.ToInt32(item) <= 10 ? Color.Red : color; // Background item brush SolidBrush backgroundBrush = new SolidBrush(color); // Text color brush SolidBrush textBrush = new SolidBrush(e.ForeColor); // Draw the background e.Graphics.FillRectangle(backgroundBrush, e.Bounds); // Draw the text e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, textBrush, e.Bounds, StringFormat.GenericDefault); // Clean up backgroundBrush.Dispose(); textBrush.Dispose(); } e.DrawFocusRectangle(); }
Espero te sirva de ayuda.
Saludos.
- Propuesto como respuesta Pablo RubioModerator martes, 20 de febrero de 2018 16:10
- Marcado como respuesta Berroa0731 martes, 20 de febrero de 2018 23:00