Selección de texto en un TextBox

Selección de texto en un TextBox

La selección de texto en un control TextBox es un proceso que funciona de modo transparente al programador, en el sentido en que este no necesita añadir código adicional para las operaciones de selección, cortar, copiar, etc., al ser tareas integradas en el sistema operativo.

Sin embargo, podemos necesitar en un determinado momento, tener información acerca de las operaciones de selección que está realizando el usuario en nuestros controles de texto. Para ello, el control TextBox dispone de las siguientes propiedades.

Programación con Visual Basic .NET © Grupo EIDOS

• SelectionStart. Posición del texto del control, en la que comienza la selección que hemos realizado.

• SelectionLength. Número de caracteres seleccionados en el control. • SelectedText. Cadena con el texto que hemos seleccionado en el control.

Mediante estas propiedades, no sólo averiguamos la selección que pueda tener un control TextBox, sino que también podemos utilizarlas para establecer por código una selección; teniendo el mismo efecto que si la hubiera efectuado el usuario con el ratón o teclado.

Para comprobar el funcionamiento de las propiedades de selección del TextBox, crearemos un proyecto Windows, y en su formulario añadiremos varios controles para manipular la selección de texto que hagamos en un TextBox. La Figura 246 muestra el formulario del ejemplo.

Figura 246. Formulario para realizar selección en el control TextBox

El control de este formulario, que vamos a emplear para las operaciones de selección es txtOrigen. En primer lugar, y aunque no se trata de una selección de texto, veremos su evento TextChanged, el cual se produce cada vez que cambia el contenido del cuadro de texto; lo usaremos por tanto, para contar la cantidad de caracteres escritos y mostrarlos en un Label. Ver Código fuente 446.

' al cambiar el texto del control se produce ' este evento Private Sub txtOrigen_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtOrigen.TextChanged

' calculamos la longitud del texto escrito Me.lblContador.Text = Me.txtOrigen.TextLength

End Sub

Código fuente 446

Los eventos MouseMove y KeyDown del TextBox, se producen respectivamente, cuando movemos el ratón sobre el control, o cada vez que pulsamos una tecla para escribir texto. Detectaremos en este

© Grupo EIDOS 29. Controles Windows

caso, si existen teclas o botones especiales presionados, que nos indiquen que se está realizando una selección de texto, y mostraremos en el formulario el texto seleccionado, el número de caracteres y la posición del carácter de inicio de la selección. Veamos los procedimientos manipuladores de estos eventos en el Código fuente 447.

' al mover el ratón por el TextBox se produce ' este evento Private Sub txtOrigen_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles txtOrigen.MouseMove

' comprobamos si al mover el ratón ' está pulsado su botón izquierdo

' en caso afirmativo es que se está ' seleccionando texto, por lo que obtenemos ' la información de selección con las ' propiedades de selección del TextBox If e.Button.Left Then

Me.lblTextoSelec.Text = Me.txtOrigen.SelectedText Me.lblLongitud.Text = Me.txtOrigen.SelectionLength Me.lblPosicion.Text = Me.txtOrigen.SelectionStart

End If

End Sub

' este evento se produce cuando se pulsa ' una tecla en el TextBox Private Sub txtOrigen_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtOrigen.KeyDown

' comprobamos las teclas pulsadas

' si está pulsada la tecla mayúsculas, ' y además se está pulsando la tecla ' flecha derecha, quiere decir que se ' está seleccionando texto; ' obtener la información de las propiedades ' de selección del control TextBox If e.Shift Then

If e.KeyCode.Right Then Me.lblTextoSelec.Text = Me.txtOrigen.SelectedText Me.lblLongitud.Text = Me.txtOrigen.SelectionLength Me.lblPosicion.Text = Me.txtOrigen.SelectionStart

End If End If

End Sub

Código fuente 447

Finalmente, tras introducir un valor en los controles txtPosicion y txtLongitud, pulsaremos el botón btnSeleccionar. Con ello conseguiremos realizar una selección de texto en el TextBox txtOrigen, y pasar el texto seleccionado al control txtDestino. El efecto será el mismo que si lo hubiera realizado el usuario, pero en este caso sin su intervención. Veamos en el Código fuente 448, el evento Click del botón btnSeleccionar.

' al pulsar este botón, seleccionar por código texto ' del control txtOrigen y pasarlo al control txtDestino

Programación con Visual Basic .NET © Grupo EIDOS

Private Sub btnSeleccionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSeleccionar.Click

Me.txtOrigen.SelectionStart = Me.txtPosicion.Text Me.txtOrigen.SelectionLength = Me.txtLongitud.Text Me.txtDestino.Text = Me.txtOrigen.SelectedText

End Sub

Código fuente 448

La Figura 247 muestra este ejemplo en ejecución.

Figura 247. Pruebas de selección de texto con el control TextBox