2011-07-13 70 views
5

¿Cómo puedo mantener el foco en un cuadro de texto después de presionar Intro en un formulario de VBA?Mantener el foco en el cuadro de texto después de presionar enter

Este código agrega el texto a un Listbox y quiero mantener el foco en el cuadro de texto para estar listo para recibir otro elemento.

Cuando hago clic en el botón Agregar, agrega el texto al Listbox y devuelve el foco al cuadro de texto, cuando presiono enter no lo hace, incluso si usa el mismo código. ¿Cualquier sugerencia?

Este es mi código para el cuadro de texto:

Private Sub TxtOtherAsset_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 

    If KeyCode = 13 Then 
     CmdAddOtherAsset_Click 
    End If 

End Sub 

y este es el código para mi botón:

Private Sub CmdAddOtherAsset_Click() 

    If TxtOtherAsset.Text <> "" Then 
     ListAddedAssets.AddItem TxtOtherAsset.Text 
     TxtOtherAsset.Text = "" 
    End If 

    TxtOtherAsset.SetFocus 

End Sub 

He intentado varias maneras, pero yo no soy capaz de volver el foco al cuadro de texto. Después de presionar enter, el foco pasa al siguiente en TabIndex.

Respuesta

4

Desde lo más alto de mi cabeza: intente configurar KeyCode en 0. Además, use la clase KeyCodeConstants (de la biblioteca Core) para determinar qué valor es la tecla Enter.

De esta manera:

If KeyCode = KeyCodeConstants.vbKeyReturn Then 
    CmdAddOtherAsset_Click 
    KeyCode = 0 
End If 

Retire la línea que está tratando de establecer el foco en otras subsecciones (TxtOtherAsset.SetFocus).

Espero que te sirva. No lo probé.

+0

Esto funcionó como un amuleto. Fue extremadamente fácil hacer este cambio. No probé la otra respuesta porque esta parecía mucho más simple. Y funcionó. ¡Gracias! – rubenploneda

+0

** 'KeyCode = 0' - esta línea es increíble! ** 1-2 horas Estaba buscando en Google, probando soluciones (incluso desesperadas, relacionadas con .NET o VB6), probando otros eventos, ya que perdí la esperanza en' KeyDown' ... ¡No funcionó hasta que encontré esta publicación de oro! – ZygD

1

¿Está utilizando la tecla Intro como desencadenante para detectar cambios en el cuadro de texto? Si ese es el caso, pruebe el evento After Update en su lugar. Además, eche un vistazo al evento On Exit. Cuando miré, noté que tiene un parámetro de Cancelar. Si aún desea capturar la tecla Intro en el evento Key Down, podría posiblemente el evento On Exit para evitar que salga del cuadro de texto. Por supuesto, eso probablemente significa que estás permanentemente atascado y es posible que tengas que configurar una forma de permitir la salida.

Cuestiones relacionadas