none
Tengo un listbox y quiero que los numeros <=10 me salgan en color rojo, ¿como lo hago? RRS feed

Respuestas

  • Hola Berroa0731,

    Hace tiempo respondí un hilo similar.

    Cambiar color letras listBox

    Es prácticamente lo mismo, solo tendrías que aplicar la lógica y detectar si el valor del item es menor o igual a 10 y le cambias de color.

    Algo como :

    private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
    {
        //Obtenemos el control ListBox que activó el evento
        ListBox lb = (ListBox)sender;
        e.DrawBackground();
    
        //Obtenemos el valor del item mediante el índice y lo convertimos a entero para comparar
        int valor = Convert.ToInt32(lb.Items[e.Index].ToString());
    
        //Si el valor es menor o igual a 10 es ROJO, caso contrario es VERDE
        Brush brush = valor <= 10 ? Brushes.Red : Brushes.Green;
    
        //Dibujamos el contenido según las propiedades
        e.Graphics.DrawString(lb.Items[e.Index].ToString(), e.Font, brush, e.Bounds);
    }

    Resultado :

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Berroa0731 lunes, 19 de febrero de 2018 21:56
    • Desmarcado como respuesta Berroa0731 lunes, 19 de febrero de 2018 22:06
    • Marcado como respuesta Berroa0731 lunes, 19 de febrero de 2018 22:07
    lunes, 19 de febrero de 2018 21:20

Todas las respuestas

  • hola berroa

    y como tienes definido el Listbox??

    lunes, 19 de febrero de 2018 14:30
  • todos los numeros me salen rojos y solo quiero que sea los nuemeros <=10 que me salgan rojos

    lunes, 19 de febrero de 2018 19:43
    • Mira el codigo

    private void listBox3_DrawItem(object sender, DrawItemEventArgs e)

            {
                ListBox lb = (ListBox)sender;
                e.DrawBackground();
                Brush brush;





                if (listBox3.Items.Count >= 10)
                    {


                        brush = Brushes.Red;
                        e.Graphics.DrawString(lb.Items[e.Index].ToString(), e.Font, brush, e.Bounds);
                    }
                    else
                    {
                        brush = Brushes.Green;
                        e.Graphics.DrawString(lb.Items[e.Index].ToString(), e.Font, brush, e.Bounds);
                    }




            }

                         


    • Editado Berroa0731 lunes, 19 de febrero de 2018 19:56 Aprender
    lunes, 19 de febrero de 2018 19:53
  • Hola Berroa0731,

    Hace tiempo respondí un hilo similar.

    Cambiar color letras listBox

    Es prácticamente lo mismo, solo tendrías que aplicar la lógica y detectar si el valor del item es menor o igual a 10 y le cambias de color.

    Algo como :

    private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
    {
        //Obtenemos el control ListBox que activó el evento
        ListBox lb = (ListBox)sender;
        e.DrawBackground();
    
        //Obtenemos el valor del item mediante el índice y lo convertimos a entero para comparar
        int valor = Convert.ToInt32(lb.Items[e.Index].ToString());
    
        //Si el valor es menor o igual a 10 es ROJO, caso contrario es VERDE
        Brush brush = valor <= 10 ? Brushes.Red : Brushes.Green;
    
        //Dibujamos el contenido según las propiedades
        e.Graphics.DrawString(lb.Items[e.Index].ToString(), e.Font, brush, e.Bounds);
    }

    Resultado :

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Berroa0731 lunes, 19 de febrero de 2018 21:56
    • Desmarcado como respuesta Berroa0731 lunes, 19 de febrero de 2018 22:06
    • Marcado como respuesta Berroa0731 lunes, 19 de febrero de 2018 22:07
    lunes, 19 de febrero de 2018 21:20
  • Gracias Joel por tu ayuda, 
    lunes, 19 de febrero de 2018 22:12
  •  float valor = Convert.ToInt32(lb.Items[e.Index].ToString()); pero este codigo me dice que no tiene el Formato correcto

    lunes, 19 de febrero de 2018 22:42
  • Los numero en el listbox contantantemente estan cambiando, asi como lo hace el administrador de tarea
    lunes, 19 de febrero de 2018 22:50
  • Me da este error, ayúdenme en esto
    miércoles, 21 de febrero de 2018 3:42
  •  float valor = Convert.ToInt32(lb.Items[e.Index].ToString()); pero este codigo me dice que no tiene el Formato correcto

    Hola Berroa0731,

    En este caso el FormatException se está produciendo porque algún valor de tu control 'ListBox' no se puede convertir a número, esto incluye el valor 'vacío' ("") o campos con letras y/o caracteres.

    Sin embargo, para impedir que se produzca ese error podrías utilizar el método TryParse, el cuál retorna 'true' si el valor se puede convertir a número y 'false' si no se puede.

    Método Int32.TryParse (String, Int32)

    Por lo que sería algo como :

    private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
    {
        //Obtenemos el control ListBox que activó el evento
        ListBox lb = (ListBox)sender;
        e.DrawBackground();
      
        Brush brush;
        int valor;
    
        //Se PUEDE convertir a número
        if (int.TryParse(lb.Items[e.Index].ToString(), out valor)){
            brush = valor <= 10 ? Brushes.Red : Brushes.Green;
        }
        else
        {
            //Si NO SE PUEDE ...
            brush = Brushes.Black;
        }
    
        //Dibujamos el contenido...
        e.Graphics.DrawString(lb.Items[e.Index].ToString(), e.Font, brush, e.Bounds);
    }

    Resultado :

    • Menor o igual a 10 (Rojo)
    • Mayor a 10 (Verde)
    • No se puede convertir a número (Negro)

    Con eso debería de bastar, sin embargo verifica los datos que tienes en tu ListBox.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    miércoles, 21 de febrero de 2018 5:43
  • GRACIAS JOEL  ESTE CODIGO ME FUNCIONO PERFETAMENTE CORRECTO,
    viernes, 9 de marzo de 2018 3:11