Visual Basic para Aplicaciones - Recibir foco

Life is soft - evento anual de software empresarial
 
Vista:

Recibir foco

Publicado por Jose (2 intervenciones) el 03/07/2024 20:57:56
Buenas,
Realmente debe ser una tontería pero ya no sé por donde cogerlo, me explico:

Un formulario
Dos Textbox, el segundo con la propiedad enabled=false
un Listview, da igual sin ningún dato
un CommandButton

Cuando inserto texto en el Textbox1 y pulso Enter o TAB, da igual y a través del evento AfterUpdate pongo la propiedad enable del Textbox2 a true y después intento que reciba el foco con Textbox2.setfocus. Buenos pues no recibe el foco y no entiendo el motivo. He probado con todos los eventos...Exit, BeforeUpdate.... y nada. Lo curioso del tema, es que si elimino o bien el commandbutton o bien el Listview funciona sin problemas.

El código es el siguiente:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1 = Empty Then
Exit Sub
Else
TextBox2.Enabled = True
TextBox2.SetFocus
End If
End Sub


¿Alguna idea?

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
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Recibir foco

Publicado por Antoni Masana (502 intervenciones) el 09/07/2024 16:26:51
Aquí hay varias cuestiones.

1º ¿Por que esta el TextBox2 con la propiedad enabled=false?

2º La forma de funcionar VB es un poco compleja y resulta que hay acciones que no las realiza hasta finalizar el procedimiento.
Es decir, el enabled=True es efectivo una vez finalice el Sub que esta ejecutando, por lo tanto cuando el la instrucción siguiente se encuentra el SetFocus no puede a puntar al TextBox2 porque aun esta con enabled=False

3º Hay una propiedad que se llama TabIndex que es para indicar en qué objeto se sitúa el cursor el iniciar un formulario y el orden a seguir.

Podrias subir un ejemplo y explicar que pretendes hacer y sería más fácil ayudarte.

Saludos.
\\//_
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

Recibir foco

Publicado por José (2 intervenciones) el 09/07/2024 19:09:33
Vaya , ya daba el tema por muerto. Gracias por contestar!!

Te respondo al punto 1. El caso es que tengo un formulario con varios textbox (da igual la cantidad), todos en enabled=false, excepto el primero (textbox1) donde el usuario tiene que insertar una referencia y ser validada (comprobar que existe o no en una tabla excel) para que el resto de textbox se pongan en enabled=true. Para ello, la única manera que se me ocurrió era usar el evento exit o Afterupdate del textbox1 para validar si la referencia era la correcta y poner el resto de los textbox en enabled=true para acto seguido lanzar el setfocus a cualquiera de los otros textbox.

La cuestión es que en el punto 2 das la respuesta a mis dudas y está claro que lo que intento no es posible. Tendré que buscar la forma.

Nuevamente, muchas gracias por contestar.
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
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Recibir foco

Publicado por Antoni Masana (502 intervenciones) el 10/07/2024 18:12:34
Prueba hacerlo de otra forma.
En el evento Change del TetBox1 si tiene datos Enabled = True si esta vacío Enabled = False, es igual si los que hay es bueno o no, ya lo valida el evento Exit.

De esta forma cuando finalice el Evento Exit ya salta al siguiente TextBox.
Y si además en la propiedad TabIndex pones 1 al TextBox1, 2 al TextBox2, 3 al TextBox3, etc. ya no hace falta el SetFocus porque ya le estas indicando al programa la secuencia de saltos de los objetos.

Saludos.
\\//_
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
Val: 38
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Recibir foco

Publicado por Darío (23 intervenciones) el 16/07/2024 19:00:52
Pone el textbox enabled en true en el evento LostFocus del text1 y pone correlativos primero los números del Tabindex en los controles cuando estas en el diseño del formulario.
Espero sirva.
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
Val: 38
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Recibir foco

Publicado por Darío (23 intervenciones) el 28/08/2024 15:01:55
Hola como estás? para mi no es una forma correcta de programar andar cambiando en tiempo de ejecución los estados de un control.
Lo normal es poner los controles habilitados, y hacer controles por programación, osea, no sé bien que es lo que tenes que controlar para que si está bien se habilite el segundo textbox, pero lo que deberías hacer a mi criterio es dejarlo habilitado, que se carguen ambos y al momento de guardar el sistema controle que ambos tengan el dato que vos queres y en caso de que alguno no cumpla dar el mensaje que debe corregir el usuario.
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