none
CAMBIO DE COLOR DE LOS DATOS CONTENIDO EN LISTBOX RRS feed

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.

    sábado, 17 de febrero de 2018 16:31
    Moderador
  • 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
    martes, 20 de febrero de 2018 13:02

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.

    sábado, 17 de febrero de 2018 16:31
    Moderador
    • ya configure en modo Owner Draw, solo quiero el codigo que me permita poner de rojo los numero <=10 que esten en la listbox
    sábado, 17 de febrero de 2018 18:07
  • ya busque en esas sugerencias que me diste y no encontré lo que queria 
    domingo, 18 de febrero de 2018 0:09
  • 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
    martes, 20 de febrero de 2018 13:02