none
Urgente !!¡¡ Ayuda RRS feed

  • Pregunta

  • Hola a todos , bueno mi consulta es que quiero poner en color rojo a los items que tienen un . al comienzo 

    pero tengo esta inconveniencia alguien  que me oriente 

     Private Sub lbdescripcion_DrawItem(sender As Object, e As DrawItemEventArgs) Handles lbdescripcion.DrawItem
            Dim lb As ListBox = DirectCast(sender, ListBox)
    
    
            Dim color As Font
            Color = New Font(e.Font.FontFamily, 10)
    
            e.DrawBackground()
    
            For Each items As String In lbdescripcion.Items
    
                If items.StartsWith(".") Then
             
                    e.Graphics.DrawString(items, e.Font, Brushes.Red, e.Bounds, New StringFormat() With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Near})
    
                
                Else
                    e.Graphics.DrawString(lb.Items(e.Index), e.Font, Brushes.Black, e.Bounds, New StringFormat() With {.Alignment = StringAlignment.Near, .LineAlignment = StringAlignment.Near})
    
                End If
    
    
    
    
    
            Next
            e.DrawFocusRectangle()
    end sub 



    Si sabes poco, aprende. Si sabes mucho, enseña


    viernes, 24 de marzo de 2017 18:04

Respuestas

  • Hola Samuel Calderon Molina,

    Disculpa por duplicar la respuesta, pero veo que estás repitiendo código innecesariamente. Si analizas bien al usar el DrawString(..) solo cambias el color del Brushes, 'Rojo' si comienza con punto y 'Negro' si no. Podrías hacerlo usando el IF(condición, si es true, si es false).

    Private Sub lbdescripcion_DrawItem(sender As ....
        e.DrawBackground()
    
        Dim lb As ListBox = CType(sender, ListBox)
    
        e.Graphics.DrawString(lb.Items(e.Index).ToString(), e.Font,
                If(lb.Items(e.Index).ToString().StartsWith("."), Brushes.Red, Brushes.Black),
                e.Bounds,
                New StringFormat() With {.Alignment = StringAlignment.Near,
                                        .LineAlignment = StringAlignment.Near})
    
        e.DrawFocusRectangle()
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 24 de marzo de 2017 18:31

Todas las respuestas

  • Hola Samuel Calderon Molina,

    El evento DrawItem del ListBox se ejecuta para todos los elementos cuando se necesitan dibujar, por lo que es innecesario que realices un 'For Each', sólo tienes que obtener el item actual y verificar si cumple con la condición o no.

    Algo como :

    Dim lb As ListBox = DirectCast(sender, ListBox)
    
    Dim color As Font = New Font(e.Font.FontFamily, 10)
    
    e.DrawBackground()
    
    Dim item = lbdescripcion.Items(e.Index).ToString()
    
    If item.StartsWith(".") Then 'Si el item actual que se está dibujando empieza por punto
    
        e.Graphics.DrawString(item, e.Font, Brushes.Red, e.Bounds,
                New StringFormat() With {.Alignment = StringAlignment.Near,
                                .LineAlignment = StringAlignment.Near})
    Else
        e.Graphics.DrawString(lb.Items(e.Index), e.Font, Brushes.Black, e.Bounds,
                New StringFormat() With {.Alignment = StringAlignment.Near,
                                    .LineAlignment = StringAlignment.Near})
    
    End If
    e.DrawFocusRectangle()

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 24 de marzo de 2017 18:16
  • Hola Samuel Calderon Molina,

    Disculpa por duplicar la respuesta, pero veo que estás repitiendo código innecesariamente. Si analizas bien al usar el DrawString(..) solo cambias el color del Brushes, 'Rojo' si comienza con punto y 'Negro' si no. Podrías hacerlo usando el IF(condición, si es true, si es false).

    Private Sub lbdescripcion_DrawItem(sender As ....
        e.DrawBackground()
    
        Dim lb As ListBox = CType(sender, ListBox)
    
        e.Graphics.DrawString(lb.Items(e.Index).ToString(), e.Font,
                If(lb.Items(e.Index).ToString().StartsWith("."), Brushes.Red, Brushes.Black),
                e.Bounds,
                New StringFormat() With {.Alignment = StringAlignment.Near,
                                        .LineAlignment = StringAlignment.Near})
    
        e.DrawFocusRectangle()
    End Sub

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    viernes, 24 de marzo de 2017 18:31
  • Gracias mil gracias por  ayudarme lo necesitaba urgente 

    Si sabes poco, aprende. Si sabes mucho, enseña

    viernes, 24 de marzo de 2017 18:48