elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [VB.NET] ¿Cómo puedo subrayar palabras de cierto color en un RichTextBox?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [VB.NET] ¿Cómo puedo subrayar palabras de cierto color en un RichTextBox?  (Leído 470 veces)
dont'Exist

Desconectado Desconectado

Mensajes: 96


Ver Perfil
[VB.NET] ¿Cómo puedo subrayar palabras de cierto color en un RichTextBox?
« en: 9 Septiembre 2019, 00:04 »

Buenas día, me llego aquí con una consulta muy corta pero que me está haciendo doler la cabeza con algo que quizás es muy sencillo, pero sinceramente no he podido avanzar, y he buscado sobre la propiedad underline, pero me he estancado ahí.

Tengo en un RichTextBox palabras escritas de distintos colores, y quisiera hacer que me haga un subrayado en aquellas palabras que sólo estén en amarillo, por ejemplo.

Espero que me puedan orientar un poco en esto.

Muchas gracias, saludos  :-\


En línea

NEBIRE


Desconectado Desconectado

Mensajes: 2.335


Ver Perfil
Re: [VB.NET] ¿Cómo puedo subrayar palabras de cierto color en un RichTextBox?
« Respuesta #1 en: 9 Septiembre 2019, 18:12 »

La cuestión es dependiente de si tal color tú lo aplicas o si ya está ahí...

A - Si los aplicas tú, se trata de iniciar otra vez el bucle que localiza el texto en cuestión y aplica el color amarillo, pero ahora en vez de aplicar el color, lo que aplicas es la fuente con la propiedad underline a true. La forma de aplicarlo será como más abajo señalo, pero la forma de localizarlo, es la misma que usaste para aplicar dicho color de selección (es decir esta forma de localizarlo, si existe será más óptima que la siguiente)...

B - Si en cambio el texto ya trae coloreado en origen el texto ("estaba así"), no queda otra que reconocerlo (en el sentido de hacer un análizarlo, no de aceptar un hecho), para ello basta un par de bucles y usando la propiedad: SelectionColor.

Ten encuenta que SelectionColor se refiere sólo al texto seleccionado actual, por lo que debes ser tu quien manipule dicha seleccion... y no tomar cualquier texto que pudiera haber sleccionado...
...nota también que el color de selección es uno en particular, el color aplicado a un texto seleccionado, pero si el texto seleccionado tiene un color en particular, refiere a dicho color, es decir un texto sin color sería el SelectionColorDefault por decirlo de alguna manera...

En pseudocódigo sería más o menos:

Código:
funcion AplicarEstilofuente (font f)
    entero, j, k

o quizás una firma más parametrizada...
Código:
funcion AplicarEstilofuente (negrita boolean, cursiva boolean, subrayada boolean, tachado boolean, size integer)
   entero, j, k
   font f

   with f  '.Style
      .Bold = negrita
      .Italic = cursiva
      .Underline = subrayada
      .Strikeout = tachado
      .Size = size
   end with

  ' ...

o quizás una firma algo menos parametrizada...
Código
  1. funcion AplicarEstilofuente (Estilo FontStyle)
  2.    entero, j, k
  3.    font f.Style = Estilo
  4.  
  5.    ' posicionar la seleccion al comienzo:
  6.    richtb.Selectionlength = 1
  7.    bucle para k desde 0 hasta richtb.TextLength
  8.        richtb.SelectionStart = k
  9.        ' v ---- desde aquí se va seleccionando el texto 'amarillo'
  10.        Si ritchtb.SelectionColor = amarillo luego    
  11.            Hacer
  12.                richtb.Selectionlength += 1  
  13.            Repetir mientras ritchtb.SelectionColor = amarillo
  14.  
  15.            ' v ------ aquí aplicas el estilo de la fuente al texto seleccionado.
  16.            richtb.selectionfont = f  
  17.            ' avanzamos el contador del bucle principal hasta el final de la selección actual.
  18.            k += richtb.Selectionlength -1 ' +0, +1, -1 afina, yo escribo al vuelo...
  19.            ' sin parar en detalles nimios que puedes corregir cuando lo pruebes.
  20.            ' la selección vuelve a ser 1 carácter hasta encontrar otro candidato.
  21.            richtb.Selectionlength = 1  
  22.        fin si
  23.    siguiente
  24. fin funcion
  25.  

Por último nota que si el texto fuera muy muy largo, podría demorarse la presentación, así que es mejor evitar que se actualice la vista (redibujado) con cada cambio al aplicar selectionfont. Conviene por tanto congelar el redibujado al inicio y redibujarlo al final, usando:
- Antes de iniciar el bucle (mejor a la entrada de la función) un: richtb.SuspendLayout
- Y después del bucle (o mejor justo antes de salir) un: richtb.ResumeLayout
OJO: van en pareja si pones el primero más vale que no lvides poner el segundo...


p.d.: Olvidaba decirte que como esto no es un problema de programación si no con el lenguaje, debes siempre mirar la fuente original del lenguaje... que para eso proporcionan una referencia completa del lenguaje....
y si procede buscar en google "ejemplos de objeto/objeto.propiedad/objeto.metodo" antes de venir a quí como si fuera algo inexistente o imposible d elocalizar, a buen seguro en ggogle abundan ejemplos.

https://docs.microsoft.com/es-es/dotnet/api/system.windows.forms.richtextbox?view=netframework-4.8#propiedades


« Última modificación: 9 Septiembre 2019, 18:31 por NEBIRE » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines