Visual Basic.NET - problem con foco

 
Vista:

problem con foco

Publicado por mizalo (59 intervenciones) el 11/02/2010 16:59:38
hola a todos

Tengo el siguiente problema.

tengo una pantalla que tiene 4 textbox, y dos radio button

------- textbox1
------- textbox2
------- textbox3
------- textbox3

cuando pulso el primer radio button el segundo y el ultimo textbox se deshabilitan,

mi pregunta es la siguiente.
cuando pulso enter va saltando de objeto en objeto, lo hace bien cuando los textbox estan habilitados, pero cuando esta el segundo y el ultimo deshabilitado, y ledoy enter en el primer text no pasa al tercero solo se queda.

por favor si me pudieran ayudar.

gracias.
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

RE:problem con foco

Publicado por Joan F (129 intervenciones) el 11/02/2010 21:14:26
Hola,

Si lo que haces es que el textbox al detectar el enter pase al siguiente específicamente, primero has de comprobar que el siguiente este activo.

O sea, si lo que haces es:

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
If e.KeyCode = Keys.Enter Then
Me.TextBox2.Focus()
e.Handled = True
End If
End Sub

Seria:

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
If e.KeyCode = Keys.Enter Then
If TextBox2.Enabled Then
Me.TextBox2.Focus()
Else
Me.TextBox3.Focus()
End If
e.Handled = True
End If
End Sub

Otra opción mucho mas elegante, es usar el metodo SelectNextControl que selecciona el siguiente control capaz de recibir el foco de acuerdo con el orden de tabulación. Ademas de esta forma con una sola función puedes controlar los 4 textbox a la vez:

Private Sub TextBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) _
Handles TextBox1.KeyDown, TextBox2.KeyDown, TextBox3.KeyDown, TextBox4.KeyDown
If e.KeyCode = Keys.Enter Then
Me.SelectNextControl(sender, True, True, True, True)
e.Handled = True
End If
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
0
Comentar

gracias por la ayuda y otra consultita

Publicado por mizalo (59 intervenciones) el 12/02/2010 20:58:08
tengo otras pantallas y de acuerdo a los botones q p pulsan se activan odesactivan los textboxt, mi pregunta es si habria alguna otra forma de hacerlo, de repenta alguna funcion?

porq tendria que definirlo textbox por textbox y condicionar cada posibilidad

gracias
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

RE:gracias por la ayuda y otra consultita

Publicado por Joan F (129 intervenciones) el 15/02/2010 02:57:46
Al final de mi respuesta te enseñaba el metodo SelectNextControl que transfiere el foco al siguiente (o anterior dependiendo de los parámetros) control capaz de recibir el foco.

Para no tener que definir textbox por textbox, puedes hacer una función handler no asociada a ningún control:

Private Sub TextBox_KeyDown_Handler(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
If e.KeyCode = Keys.Enter Then
Me.SelectNextControl(sender, True, True, True, True)
e.Handled = True
End If
End Sub

Y entonces en el evento Load del formulario con un for each puedes associar el evento KeyDown de cada uno de los TextBox del formulario al evento:

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

For Each elementoControl As Control In Me.Controls
If elementoControl.GetType() Is GetType(TextBox) Then
AddHandler elementoControl.KeyDown, AddressOf TextBox_KeyDown_Handler
End If
Next

End Sub

De esta forma no tienes que ir textbox por texbox añadiendo el evento KeyDown ni hace falta condicionar nada ya que el método SelectNextControl transfiere el foco al control capaz de recibir el foco (o sea si el texbox esta desactivado no recibirá el foco.
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

gracias

Publicado por mizalo  (59 intervenciones) el 17/02/2010 16:35:39
tu respuesta esta super
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