Visual Basic - Label con multi color

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Label con multi color

Publicado por Luis (3 intervenciones) el 06/11/2015 07:56:54
Saludos comunidad de programadores, acabo de registrarme en el sitio para poderles consultar sobre esta inquietud que tengo.

Estoy necesitando de alguna función que trabaje sobre el control label que me facilite la tarea de poder darle colores a las diferentes palabras dentro del mismo y no que todo el label mantenga siempre el mismo color de principio a fin ya que así está determinada su propiedad forecolor.

No se si se podrá lograr esto estoy buscando lograr ojalá alguien pueda ayudarme con alguna función, método, clase u otro tipo de control o algo por el estilo.

De ser así les estará muy agradecido por que me ahorro la tarea de usar múltiples labels lo que me ocasiona problemas a la hora de usar cadenas de caracteres con distinta longitud.

Espero alguna respuesta. Gracias desde ya.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Label con multi color

Publicado por Marcelo (226 intervenciones) el 08/11/2015 07:37:09
Hola Luis,
El control etiqueta tampoco tiene soporte para lo que pides. Lo único que se me viene a la mente es el utilizar el control RichTextEdit para simular una etiqueta. Revisa el siguiente código y los comentarios a ver si te sirve de algo. Suerte!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Private Sub Form_Load()
'Agrega un richtextbox control a tu formulario y agrega el código que sigue.
'Asegurate de cambiar Me.RichTextBox1.Appearance = rtfFlat manualmente usando el diseñador.
'Me.RichTextBox1.Appearance = rtfFlat 'Cambialo manualmente desde el diseñador...
 
Me.RichTextBox1.Locked = True
Me.RichTextBox1.BorderStyle = rtfNoBorder
Me.RichTextBox1.BackColor = Me.BackColor
 
Dim sLabelValue As String
sLabelValue = "Este es el texto que quiero cambiar:"
 
'Largo de la cadena sLabelValue
Dim iLenLabelValue As Integer
iLenLabelValue = Len(sLabelValue)
 
'Se explica por si solo
Dim sTextoABuscar As String
 
'Donde comienza en la cadena el texto que estamos buscando
Dim iCurrentPosition As Integer
iCurrentPosition = 0
 
'Asignamos la cadena al texto de nuestro RichTextBox
Me.RichTextBox1.Text = sLabelValue
 
'Color Rojo
sTextoABuscar = "Este es"
iCurrentPosition = RichTextBox1.Find(sTextoABuscar, 0, iLenLabelValue) 'Donde comienza la cadena que estamos buscando
RichTextBox1.SelStart = iCurrentPosition 'Seleccionar desde donde comienza nuestro texto
RichTextBox1.SelLength = Len(sTextoABuscar) 'Largo del Texto que estamos buscando
RichTextBox1.SelColor = vbRed 'Color con el cual pintaremos el texto
 
'Color Azul
sTextoABuscar = "texto"
iCurrentPosition = RichTextBox1.Find(sTextoABuscar, 0, iLenLabelValue)
RichTextBox1.SelStart = iCurrentPosition
RichTextBox1.SelLength = Len(sTextoABuscar)
RichTextBox1.SelColor = vbBlue
 
'Color Verde
sTextoABuscar = "quiero cambiar:"
iCurrentPosition = RichTextBox1.Find(sTextoABuscar, 0, iLenLabelValue)
RichTextBox1.SelStart = iCurrentPosition
RichTextBox1.SelLength = Len(sTextoABuscar)
RichTextBox1.SelColor = vbGreen
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Label con multi color

Publicado por Kelin (1 intervención) el 12/11/2015 22:10:34
Question
Inicie sesión para votar
0
Inicie sesión para votar
con un timer podrias hacerlo sin problemas

programarias el evento tick del control timer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Dim lista As New List(Of Color)
 
Dim pos As Integer = 0
 
Private Sub Form_Load(...)
 
   lista.Add(Color.Red)
 
   lista.Add(Color.Blue)
 
   lista.Add(Color.Green)
 
End Sub
 
Private Sub timer1_Tick(...)
 
    timer1.Stop()
 
   Label.BackColor = lista(pos)
 
   pos += 1
 
   If pos = 3 Then
 
       pos = 0  'aqui vuelve a empezar el ciclo porque llego al ultimo color de la lista
 
   End If
 
   timer1.Start()
 
Endd Sub


lo que si vas a tener que usar alguna lista de colores por la cual pasara el label
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Label con multi color

Publicado por Luis (3 intervenciones) el 13/11/2015 01:46:22
Hola muchas gracias por responder, les comento que al final me decidí por el ritchtextbox y he conseguido en parte lo que necesitaba para colorear el contenido.

Si les interesa puedo compartir el codigo. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Label con multi color

Publicado por Marcelo (226 intervenciones) el 13/11/2015 07:50:16
Seria excelente si publicaras tu código para los demás foreros que le puedan necesitar. Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Label con multi color

Publicado por Luis (3 intervenciones) el 13/11/2015 09:25:33
Claro, pido disculpas por mi inexperiencia.

Aquí está el código que he utilizado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub colorear()
 
RTB.SelStart = 0 ' aca indico que seleccione el texto de ritchtextbox desde el primer caracter
RTB.SelLength = Len(RTB.Text) 'hasta el final
RTB.SelColor = &H8000000B 'y lo pinte de color blanco
 
pos = RTB.Find(Label.Caption, RTB.SelStart, , rtfWholeWord) 'aca indico que busque dentro del RTB las coincidencias con el Label
    Do While pos <> -1 'aca buscará hasta el final del texto TODAS las coincidencias
        RTB.SelStart = pos
        RTB.SelLength = Len(Label.caption)
       RTB.SelColor = vbBlue 'y las pintará de color azul
        pos = RTB.Find(Label.Caption, (pos + Len(Label.Caption)), Len(RTB.Text), rtfWholeWord)
        RTB.SelStart = Len(frm_RTB.Text)
    Loop
 
End sub

eso es todo, si no entienden algo me avisan. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar