none
Cambiar de color parte de una cadena RRS feed

  • Pregunta

  • Hola tengo esta cadena 

    Label31.Text = "Añadir " & ComboBox1.SelectedItem & " :" & " 546" & "gr."

    y no se como puedo poner de color rojo y un tamaño mas grande la parte 546gr.

    gracias 

    martes, 29 de diciembre de 2015 19:47

Respuestas

  • Es un poco chapuza pero igual te puede servir.

    Si dejas el Text del Label vacío y pones el texto a mostrar por ejemplo en la propiedad Tag, podrías personalizarlo desde el evento Paint:

        Private Sub Label1_Paint(sender As Object, e As PaintEventArgs) Handles Label1.Paint
            Dim label As Label = sender
            Dim texto As String = label.Tag.ToString()
            Dim space As Integer = texto.LastIndexOf(" ")
            Dim cadena1 As String = IIf(space>0, texto.Substring(0,space + 1), texto)
            Dim cadena2 As String = IIf(space > 0, texto.Substring(space + 1), "")
            Dim width As Integer = e.Graphics.MeasureString(cadena1, label.Font).Width
            Dim rect As New Rectangle(e.ClipRectangle.X, e.ClipRectangle.Y, width, e.ClipRectangle.Height)
            TextRenderer.DrawText(e.Graphics, cadena1, label.Font, rect, label.ForeColor)
            If Not String.IsNullOrEmpty(cadena2) Then
                rect.X += width
                Dim font As New Font(label.Font.FontFamily, label.Font.Size + 2, label.Font.Style)
                rect.Width = e.Graphics.MeasureString(cadena2, font).Width
                TextRenderer.DrawText(e.Graphics, cadena2, font, rect, Color.Red)
            End If
        End Sub

    Este ejemplo coge el texto a partir del último espacio y lo escribe en rojo con una fuente mayor.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET miércoles, 30 de diciembre de 2015 18:22
    miércoles, 30 de diciembre de 2015 7:54

Todas las respuestas

  • Con un Label no puedes, el control Label no tiene esa prestación. Tendrías que sustituir el label por otro control (típicamente un custom control o un user control), o bien usar dos labels uno junto al otro y escribir la parte correspondiente en cada uno de ellos.
    martes, 29 de diciembre de 2015 22:17
  • Hola:

    Puedes usar varios label de esta manera. Si quieres esta frase. Feliz año viejo.

    label1.text = Feliz

    label2.text = año

    label3.text = viejo

    Así sin funcinoa.


    http://electronica-pic.blogspot.com

    martes, 29 de diciembre de 2015 22:53
  • Puedes usar RichTextbox sin borde y enable = false o modo readonly

    http://stackoverflow.com/questions/1926264/color-different-parts-of-a-richtextbox-string?rq=1

    martes, 29 de diciembre de 2015 23:03
  • Hola:

    Por cierto, hace mucho tiempo que Microsoft no pone componentes nuevos en sus nuevas versiones de Visual Stduio, siempre están los mismos, a parte que el 2012, 2013 y 2015 basicamente es el mismo con cosas internas mejoradas que no se notan mucho.

    Haber si espabilan y ponen algo completamente nuevo y útil para el 2018 por ahí.

    Detalles como estos para ahorra mucho tiempo.

    http://www.ucancode.net/CSharp_Tutorial_GDI+_Gauge_Source_Code.htm

    http://www.codeproject.com/Articles/20341/Aqua-Gauge

    Y más funciones útiles para no estar con terceros, y esos terceros avandones sus creaciones dejándolo incompatible con las nuevas versiones de VS .net.


    http://electronica-pic.blogspot.com

    miércoles, 30 de diciembre de 2015 1:58
  • Es un poco chapuza pero igual te puede servir.

    Si dejas el Text del Label vacío y pones el texto a mostrar por ejemplo en la propiedad Tag, podrías personalizarlo desde el evento Paint:

        Private Sub Label1_Paint(sender As Object, e As PaintEventArgs) Handles Label1.Paint
            Dim label As Label = sender
            Dim texto As String = label.Tag.ToString()
            Dim space As Integer = texto.LastIndexOf(" ")
            Dim cadena1 As String = IIf(space>0, texto.Substring(0,space + 1), texto)
            Dim cadena2 As String = IIf(space > 0, texto.Substring(space + 1), "")
            Dim width As Integer = e.Graphics.MeasureString(cadena1, label.Font).Width
            Dim rect As New Rectangle(e.ClipRectangle.X, e.ClipRectangle.Y, width, e.ClipRectangle.Height)
            TextRenderer.DrawText(e.Graphics, cadena1, label.Font, rect, label.ForeColor)
            If Not String.IsNullOrEmpty(cadena2) Then
                rect.X += width
                Dim font As New Font(label.Font.FontFamily, label.Font.Size + 2, label.Font.Style)
                rect.Width = e.Graphics.MeasureString(cadena2, font).Width
                TextRenderer.DrawText(e.Graphics, cadena2, font, rect, Color.Red)
            End If
        End Sub

    Este ejemplo coge el texto a partir del último espacio y lo escribe en rojo con una fuente mayor.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta JETET miércoles, 30 de diciembre de 2015 18:22
    miércoles, 30 de diciembre de 2015 7:54
  • Gracias Asier funciona perfecta mente pero ya lo tenia solucionado de esta manera 

     Label31.Text = "Añadir " & ComboBox1.SelectedItem & " : "
                        L
                        Label21.Location = New Point(Label31.Width + 102, Label21.Location.Y + 1)

    miércoles, 30 de diciembre de 2015 18:22