Sección de tutoriales y manuales vb

Control RichTextBox de vb

Volver al índice



 

 

 

Esta sección explica el uso básico con ejemplos del control Microsoft RichTextBox de Visual basic.

 

 

 

 

 

 


Contenido:

 

 


1 - Descripción del control RichTextBox

Este control , similar a un TextBox pero que posee mas opciones, se debe añadir desde el menú Proyecto > Componentes bajo el nombre de Microsoft Rich TextBox Control, ya que no es un control estándar.

A diferencia del control TextBox clásico, este permite por ejemplo: Cambiar el color de determinada porción de un texto, el tipo de fuente, mostrar imágenes, cargar archivos de texto enriquecido ( archivos RTF ), leer y guardar archivos mediante una serie de métodos que posee el control, tanto RTF como TXT, buscar cadenas de texto dentro del control con un método propio, y muchas otras opciones.

 


2 - Propiedades SelText , SelStart y SelLength

 

Estas tres propiedades, que también la posee el control TextBox, y algunos otros controles como el ComboBox por ejemplo, permite:

 

Un ejemplo del uso de SelLength, SelStart y SelText

 

Primero asigna a la propiedad Text, la cadena "Hoy es Lunes". Luego se posiciona mediante SelStart en el séptimo caracter ( para especificar el punto de inicio de la selección ) , y por último a SelLength se le asigna el número 5. Esto como resultado seleccionará la palabra "Lunes"

 

RichTextBox.Text = "Hoy es Lunes"

RichTextBox.SelStart = 7

RichTextBox.SelLength = 5

Teniendo la frase seleccionada, si ahora consultamos la propiedad SelText, por ejemplo mediante un MsgBox, nos mostrará dicha porción de texto.

 

MsgBox RichTextBox.SelText

 

SelText, al igual que las dos anteriores, es una propiedad de Lectura y escritura, así como en este caso consultamos el valor y lo mostramos mediante un mensaje, también podemos cambiarlo, es decir establecer uno nuevo. Lo siguiente, selecciona la frase Lunes, y al presionar un Command1 se cambia el texto seleccionado por la palabra "Martes"

 

Private Sub Command1_Click()
RichTextBox.SelText = "Martes"
End Sub

Private Sub Form_Load()

RichTextBox.Text = "Hoy es Lunes"

RichTextBox.SelStart = 7

RichTextBox.SelLength = 5

End Sub 

 

Nota: Si no hay ningún texto, frase o caracter seleccionado en el RichText, la propiedad SelText contiene una cadena vacía, por lo tanto, si se le establece un nuevo valor, se añadirá el mismo tomando el valor de la propiedad SelStart.

 


3 - Propiedades para modificar el estilo de fuente de la selección y otras opciones

 

Para modificar y consultar el estilo de la fuente seleccionada en el control como algunas otras características, como por ejemplo Negrita, Itálica, subrayado, color del texto, alineación ,etc.., se pueden utilizar las siguientes propiedades:

Ejemplos del uso estas propiedades:

 

Lo siguiente, cambia al texto seleccionado del RichTextBox, el tamaño , el tipo de fuente por defecto a Verdana y lo coloca en Negrita al presionar un Command1:

 

Private Sub Command1_Click()
With El_RichTextBox

.SelFontSize = 16
.SelBold = True
.SelFontName = "Verdana"

End With
End Sub

Private Sub Form_Load()

El_RichTextBox.Text = "Un parrafo" & vbNewLine & "Otro parrafo"

End Sub 

 

Si quisiéremos cambiar por ejemplo el tipo fuente, el tamaño y el estilo de todo el contenido del control, es decir no solo la porción seleccionada, podemos utilizar el objeto Font:

 

Private Sub Command2_Click()

With El_RichTextBox.Font
    
    .Bold = True 'Negrita
    .Italic = True 'Itálica
    .Name = "Verdana" 'fuente
    .Size = 25 'Tamaño
    .Underline = True 'Subrayado

End With

End Sub 

 

 

Ahora en este ejemplo, se utiliza la propiedad SelAlignment, para alinear el texto a la izquierda, a la derecha y para centrarlo :

Colocar un List1 y un RichTextBox:

 

Private Sub Form_Load()


List1.AddItem " Alinear a la izquierda "
List1.AddItem " Alinear a la Derecha "
List1.AddItem " Centrar texto "

El_RichTextBox.Text = "Párrafo 1" & vbNewLine & vbNewLine _
                      & "Parrafo 2" & vbNewLine & vbNewLine _
                      & "Parrafo 3" & vbNewLine & vbNewLine _
                      & "Párrafo 4" & vbNewLine & vbNewLine _

End Sub

Private Sub List1_Click()
'Establece la alineación: _
El valor 0 alinea a la izquierda _
El 1 a la derecha, y el 2 centra el texto
El_RichTextBox.SelAlignment = List1.ListIndex
End Sub 

 

En el ejemplo anterior, la propiedad SelAlignment, le aplica la alineación al párrafo donde se encuentra el punto de inserción. En cambio, Si quisiéremos alinear todo el contenido del RichTextBox, se podría hacer de esta manera, utilizando la propiedad SelLength para seleccionar todo el contenido en conjunto con la función Len de Visual basic:

 

Private Sub List1_Click()

El_RichTextBox.SelStart = 0
El_RichTextBox.SelLength = Len(El_RichTextBox)

El_RichTextBox.SelAlignment = List1.ListIndex
End Sub 

 

Lo siguiente, cambia de color Azul y establece en Negrita, la porción de texto seleccionado al presionar un Command1, utilizando la propiedad SelColor y SelBold.

 

El_RichTextBox.SelColor = vbBlue

El_RichTextBox.SelBold = True

 

Cambia a color rojo todo el contenido del control:

 

With El_RichTextBox


    'Selecciona todo
    .SelStart = 0
    .SelLength = Len(El_RichTextBox)

    'Establece el Color rojo
    .SelColor = vbRed

End With 

 

Este ejemplo, que no tiene mucho sentido, pero muestra como cambiar de color cada caracter a un valor aleatorio, recorriéndolo uno a uno mediante un bucle:

 

Private Sub Command2_Click()


' Recorre caracter por caracter
For caracter = 0 To Len(El_RichTextBox.Text)

With El_RichTextBox
    
    'Incrementa el SelStart
    .SelStart = caracter
    
    'Selecciona el caracter
    .SelLength = .SelLength + 1

    'Establece el Color aleatorio  al caracter actual
    .SelColor = RGB(Int((255) * Rnd), _
                    Int((255) * Rnd), _
                    Int((255) * Rnd))

End With

Next

End Sub

Private Sub Form_Load()

El_RichTextBox.Font.Size = 12
El_RichTextBox.Font.Bold = True

El_RichTextBox.Text = "Parrafo 1" & vbNewLine & vbNewLine _
                      & "Parrafo 2" & vbNewLine & vbNewLine _

End Sub 

 


4 - Utilizar Viñetas mediante la propiedad SelBullet

 

Este ejemplo muestra como utilizar dicha propiedad en conjunto con la propiedad BulletIndent para aplicar viñetas. Como muestra el gráfico, al presionar el checkBox, se establece la propiedad en SelBullet en True. BulletIndent en cambio, especifica la sangría de la línea que tiene la viñeta.

Colocar un check1 y un control RichText

 

vista del ejemplo con el control check para aplicar viñetas a un control Rich TextBox

 

Nota: la propiedad BulletIndent para el margen, toma como escala el valor del contenedor del control RichTextbox, es decir si por ejemplo está en un formulario y el ScaleMode en VbPixels, el margen será en pixeles.

 

 Private Sub Check1_Click()

If Check1 Then

'Sangría de 20 pixeles
   El_RichTextBox.BulletIndent = 20
   'Establece la viñeta al Richtext
   El_RichTextBox.SelBullet = True
Else
   ' Quita la viñeta
   El_RichTextBox.SelBullet = False
End If


El_RichTextBox.SetFocus

End Sub

Private Sub El_RichTextBox_SelChange()
'Cambia el Value del check según el valor _
de SelBullet del párrafo donde estamos ubicados
If El_RichTextBox.SelBullet Then
   Check1.Value = 1
Else
   Check1.Value = 0
End If
End Sub

Private Sub Form_Load()
'Pixeles
Me.ScaleMode = vbPixels
Check1.Caption = " Viñeta "
End Sub

 


5 - Propiedad AutoVerbMenu

 

La Propiedad AutoVerbMenu, devuelve o establece un valor que indica si los verbos seleccionados del control RichTextBox, se mostrarán como un menú emergente al hacer clic con el botón secundario del mouse. Es decir esta propiedad lo que hace es poder utilizar o no, el menú emergente para copiar, pegar, seleccionar etc..

 

vista del menú desplegable de edición del contenido del control

Este propiedad de tipo Boolean, por defecto se encuentra con el valor False al añadir un RichTextBox al Formulario, es decir desactivada, por lo tanto no mostrará dicho menú emergente

 


6 - Propiedad HideSelection

HideSelection, que también la posee algunos otros controles como por ejemplo el control ListView, lo que hace es, si hay contenido seleccionado en el Rich y el mismo pierde el foco al pasar a otro control u objeto, ocultar o no la selección.

Este gráfico muestra como el control Check tiene el foco y la selección del texto permanece visible.

 

vista del ejemplo de la propiedad HideSelection

 


7 - Propiedad ScrollBars

Esta propiedad visualiza barras de desplazamiento si es necesario, y tiene cuatro valores posibles: el 0 indica que no mostrará barras de scroll, el 1 Horizontal, el 2 Vertical, y el 3 Ambas barras.

Importante: esta propiedad se debe establecer en tiempo de diseño, ya que en tiempo de ejecución es de solo lectura . Por lo tanto se puede utilizar la propiadad DisableScroll para desactivar o activar las barras en tiempo de ejecución si es que necesitamos hacerlo.

 


8 - Método LoadFile y SaveFile

El método LoadFile se utiliza para cargar un archivo .RTF o un archivo de texto en el control RichTextBox.

En cambio el Método SaveFile se utiliza para Guardar en un archivo el contenido del control.


Por ejemplo lo siguiente carga un archivo RTF llamado El_Archivo.rtf ubicado en la unidad c:

 

El_RichTextBox.LoadFile "c:\El_Archivo.rtf", rtfRTF

 

Como se ve, el método posee dos parámetros, el primero es la ruta del fichero y el segundo es el tipo de archivo. Si vamos a cargar un archivo RTF, se debe pasar la constante rtfRTF que equivale a 0. En cambio para un archivo de texto plano, se debe pasar la constante rtfText, como muestra la siguiente línea:

 

El_RichTextBox.LoadFile "c:\El_Archivo.txt", rtfText

 

Nota: Al utilizar este método para cargar un archivo, todo el contenido del control que haya en el momento se perderá.

El método SaveFile como se dijo, se utiliza para guardar el contenido del control en un nuevo archivo. Al igual que en el método LoadFile, se debe especificar el tipo del fichero, un RTF o un archivo de texto, con las constantes mencionadas anteriormente.

Por ejemplo la siguientes líneas, genera dos párrafos con el color de los caracteres aleatorios, y graba el contenido en la unidad c: bajo el nombre de Ejemplo.RTF:

 

Private Sub Command2_Click()
' Recorre cada caracter del control
For caracter = 0 To Len(El_RichTextBox.Text)

With El_RichTextBox
    
    'Incrementa el punto de inserción ,es decir el  SelStart
    .SelStart = caracter
    
    'Selecciona el caracter actual
    .SelLength = .SelLength + 1
    'Cambia el tamaño de la fuente de este caracter
    .SelFontSize = Int((32 - 10 + 1) * Rnd + 10)
    
    
    
    'Establece el Color aleatorio  al caracter actual
    .SelColor = RGB(Int((255) * Rnd), _
                    Int((255) * Rnd), _
                    Int((255) * Rnd))
     
     
     'Guarda el contenido en un nuevo archivo RTF
    .SaveFile "c:\ejemplo.rtf", rtfRTF


End With

Next

End Sub

Private Sub Form_Load()

'Agrega un contenido al control

El_RichTextBox.Font.Size = 12
El_RichTextBox.Font.Bold = True

El_RichTextBox.Text = "Parrafo 1" & vbNewLine & vbNewLine _
                      & "Párrafo 2" & vbNewLine & vbNewLine _


End Sub 

 


9 - Método Find - Buscar cadenas dentro del RichTextBox

 

Como dice el título, este método se utiliza para buscar una cadena especificada en el texto del control.

Pos = El_RichTextBox.Find(El_Texto, Inicio, Fin, Opciones)

 

El primer parámetro es obligatorio, ya que es la cadena de caracteres a buscar. En cambio Inicio y Fin son opcionales, y establecen la posición donde comenzar a buscar, y hasta donde buscar respectivamente. Si en el caso de Inicio no especificamos ningún número donde comenzar la búsqueda, buscará a partir de donde se encuentre el cursor ( punto de inserción ). En el parámetro Fin, si no especificamos hasta que caracter buscar, lo hará hasta el último carácter del Richtext

El parámetro Opciones también es opcional y admite los siguientes valores:

Todas estos tres valores para el parámetro Opciones, se pueden utilizar en forma conjunta para combinar dichas opciones utilizando el operador Or, por ejemplo:

Colocar un Command1, un Text1 y un RichTextBox:

 

vista del ejemplo para utilizar el método Find

 

Private Sub Command1_Click()
Dim Pos As Long
Dim Inicio As Long


'Buscará a partir de la propiedad SelStart
Inicio = El_RichTextBox.SelStart
'Buscará hasta el fin del contenido del RichTextBox
Fin = Len(El_RichTextBox.Text)

'Busca y resalta la palabra solo si el texto _
ingresado en Text1 es la palabra completa _
distinguiendo de Mayúscula y minúscula

Pos = El_RichTextBox.Find(Text1, _
                          Inicio, _
                          Fin, _
                          rtfWholeWord Or rtfMatchCase)

End Sub

Private Sub Form_Load()

Command1.Caption = " Buscar "
El_RichTextBox.Text = "Hola Mundo"
Text1 = "Mundo"
El_RichTextBox.HideSelection = False

End Sub 

 

El método Find, al ejecutarlo, devuelve un número que indica la posición del primer caracter encontrado. Si no se encontró la frase a buscar, la misma devuelve el valor -1.

Al final de la pagina hay dos enlaces con ejemplos que utilizan este método para buscar cadenas y reemplazar, seleccionar etc...

 


10 - Pegar gráficos con SendKeys

Para añadir gráficos e imágenes en el control , dos formas posibles es utilizando la función SendKeys de vb, o utilizando la función del api SendMessage.

Este ejemplo para descargar realizado por un miembro del foro, lo que hace es al presionar un Commandbutton, cambia los caracteres del código vb para usar con Smileys en el texto del RichText y de acuerdo al código vb, le pega la imagen correspondiente .

Cada imagen se encuentra en unos picturebox

Vista previa del ejemplo

 

Descargar

 


11 - Añadir tabulación en el control

Este simple ejemplo muestra como poder utilizar la tecla Tab para poder insertar tabulación en el richTextBox

Colocar un control Richetextbox1 en el formulario y pegar el siguiente código fuente

' vector
Dim arrTabStop() As Boolean

'Deshabilita el TabStop de todos los controles del formulario
Private Sub RichTextBox1_GotFocus()
    
    Dim i As Integer
    
    ' redimensiona el array a la cantidad de controles que haya en el form
    ReDim arrTabStop(0 To Me.Controls.Count - 1) As Boolean
    
    ' recorre todos los controles
    For i = 0 To Me.Controls.Count - 1
        ' guarda los valores para poder restaurarlos luego
        arrTabStop(i) = Controls(i).TabStop
        ' los deshabilita
        Controls(i).TabStop = False
    Next
End Sub

'Restaura el TabStop de los controles del formulario
Private Sub RichTextBox1_LostFocus()
   For i = 0 To Controls.Count - 1
       Controls(i).TabStop = arrTabStop(i)
   Next
End Sub 

 

 


12 - Eventos del control RichTextBox

La mayoría de los eventos son iguales a los que posee un control TextBox y los demás controles, GotFocus, LostFocus, Change etc...

El único evento propio y exclusivo del control es SelChange.

Este evento ocurre o se dispara cuando la selección de texto actual en el control RichTextBox ha cambiado o cuando se ha movido el punto de inserción dentro del control.

Para entender este evento, por ejemplo si colocás un MsgBox dentro de SelChange

 

Private Sub El_RichTextBox_SelChange()

MsgBox " Se ejecutó el evento SelChange "

End Sub

 

Cada ves que muevas el punto de inserción en el control, o cambie alguna parte del texto seleccionado, se ejecutará, inclusive antes que el evento Change.

Una forma de entender el tema de cuando se produce tal o cual evento antes que otro, es probar por ejemplo, colocando un MsgBox o un Debug.Print, en cada evento, e interactuar con el control para ver como se comportan.

Por ejemplo:

Colocar un command1 y un RichText:

Private Sub Command1_Click()

With El_RichTextBox
    
    .SelStart = 0
    
    .SelLength = Len(.Text)
    
    .SelColor = vbRed


End With

End Sub

Private Sub El_RichTextBox_Change()
MsgBox " Se ejecutó el Evento Change "
End Sub

Private Sub El_RichTextBox_SelChange()

MsgBox " Se ejecutó el evento SelChange "

End Sub



Private Sub Form_Load()
El_RichTextBox.Text = " Una frase "
End Sub 

 

Por último: Este control, posee varios otros métodos y propiedades que los vistos en esta guía.

A continuación hay algunos enlaces relacionados al control.


Enlaces relacionados


Volver al índice

 


Buscar en Recursos vb