Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Moverse entre textbox con enter

291 views
Skip to first unread message

Squiur

unread,
Dec 7, 2009, 8:54:01 AM12/7/09
to
Buenas tardes.

En Visual Basic 2008, como puedo hacer para mover el cursor entre controles
ya sean textbox y combobox presionando la tecla enter... asi mismo que al
llegar al un textbox automáticamente se seleccione su contenido.

lo que quiero es reemplezar la tecla tab por enter.

--
Gracias
Atte.
Squiur.

SoftJaén

unread,
Dec 7, 2009, 1:15:42 PM12/7/09
to
"Squiur" preguntó:

>
> En Visual Basic 2008, como puedo hacer para mover el cursor entre
> controles
> ya sean textbox y combobox presionando la tecla enter...

Hola:

Para ello tienes que hacer uso del método «GetNextControl» de la clase Form,
el cual te devuelve el siguiente o el anterior control existente en el orden
de tabulación de los controles que hayas establecido, de ahí que sea
importante que establezcas bien el orden de tabulación de los controles
existentes en el formulario.

Prueba el siguiente procedimiento, el cual está basado en un ejemplo de
Francesco Balena:

Public Sub SendKeyTab( _
ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs, _
ByVal frm As Form)

' Desplazar el foco entre los distintos controles TextBox
' mediante la tecla Return. El código está basado en un
' ejemplo de Franceso Balena.
'
' Iniciar todos los controles seleccionados actualmente.
'
Dim ctrl As Control = frm.ActiveControl

Do
' Obtener el siguiente control hacia delante en el
' orden de tabulación.
ctrl = frm.GetNextControl(ctrl, True)

' GetNextControl(ctrl, False) puede devolver Nothing si
' es el primer control.

If Not (ctrl Is Nothing) AndAlso ctrl.CanFocus _
AndAlso ctrl.TabStop Then
' Si el control puede recibir el foco, se lo doy.
ctrl.Focus()
e.Handled = True
Exit Do
End If
Loop

End Sub

Ahora, para llamar al procedimiento utilizarías el evento «KeyDown» del
formulario:

Private Sub Form1_KeyDown( _
ByVal sender As Object, _
ByVal e As KeyEventArgs) Handles Me.KeyDown

If e.KeyCode = Keys.Return Then SendKeyTab(sender, e, Me)

End Sub

Para que los eventos del formulario se produzcan antes que los mismos
eventos de los controles, deberás de establecer a «True» el valor de la
propiedad «KeyPreview» del formulario:

Private Sub Form1_Load( _
ByVal sender As Object, _
ByVal e As EventArgs) Handles MyBase.Load

Me.KeyPreview = True

End Sub

Por último, para evitar el pitido que se produce cuando pulsas la tecla
«Enter», en el evento «KeyPress» del formulario, ejecuta lo siguiente:

Private Sub Form1_KeyPress( _
ByVal sender As Object, _
ByVal e As KeyPressEventArgs) Handles Me.KeyPress

' Si la tecla pulsada es la tecla Intro ...
If e.KeyChar = Convert.ToChar(Keys.Return) Then
' ... evito el pitido
e.Handled = True
End If

End Sub

> asi mismo que al llegar al un textbox automáticamente se
> seleccione su contenido.

En el evento Enter de cada control TextBox o ComboBox, tienes que llamar a
su método SelectAll. Pero para no instalar un controlador de eventos para
cada control TextBox, puedes hacer uso del siguiente procedimiento:

Private Sub ControlOnEnter( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs)

Dim ctrl As Control = DirectCast(sender, Control)

If TypeOf ctrl Is TextBox Then
DirectCast(ctrl, TextBox).SelectAll()

ElseIf TypeOf ctrl Is ComboBox Then
DirectCast(ctrl, ComboBox).SelectAll()

End If

End Sub

Ahora, instalarías el controlador del evento Enter en el evento Load del
formulario:

Private Sub Form1_Load( _
ByVal sender As Object, _
ByVal e As EventArgs) Handles MyBase.Load

Me.KeyPreview = True

For Each ctrl As Control In Controls

If (TypeOf ctrl Is TextBox) Or _
(TypeOf ctrl Is ComboBox) Then

AddHandler ctrl.Enter, AddressOf ControlOnEnter

End If

Next

End Sub

Un saludo

--
Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.


SoftJaén

unread,
Dec 7, 2009, 1:21:08 PM12/7/09
to
> asi mismo que al llegar al un textbox automáticamente se
> seleccione su contenido

Como solamente deseas que se seleccione el texto de los controles TextBox,
elimina las referencias a los controles del tipo ComboBox, es decir, elimina
ésto:

... Or (TypeOf ctrl Is ComboBox)

0 new messages