Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Ejemplo con Lista Circular aplicado al enfoque
#1

Buenas!.

Después de dar muchas vueltas e intentando crear un código que lo hiciera, resulta que Gambas tiene el componente gb.data
que incluye la clase List que es una lista circular doblemente enlazada.

La idea del ejemplo es que tengo tres cajas de texto y al pulsar la tecla Enter o la Intro, el foco pasa de la primera a la segunda,
de la segunda a la tercera y cuando llega a la última y volvemos a pulsar Enter, vuelve a comenzar por la primera.

En este caso necesita que se pulse Enter. No me vale la tecla de tabulación.

[Imagen: ZAiisAz.png]

GAMBAS
  1. Private lista As List
  2.  
  3. Public Sub Form_Open()
  4.  
  5.   Me.Title = "Enfoque Circular"
  6.   lista = New List
  7.  
  8.   'El primer elemento de la lista es el último insertado (la cabeza)
  9.   'Una pila de TextBoxes en este caso. El tipo de dato que admite es Variant
  10.  
  11.   lista.Append(TextBox1)
  12.   lista.Append(TextBox2)
  13.   lista.Append(TextBox3)
  14.  
  15.  
  16. Public Sub CajasDeTexto_KeyPress()
  17.  
  18.   If Key.code = Key.Return Or Key.code = Key.Enter Then     
  19.     'Probar a cambiar del método MovePrev a MoveNext y ver el efecto
  20.     
  21.     'Se mueve al valor anterior. Si el actual era el primer valor, se convertirá en el último.
  22.     
  23.     lista.MovePrev
  24.     
  25.     'Se mueve del actual elemento al siguiente y si el actual es el último, se convertirá en el primero (es ciclico)
  26.     'lista.MoveNext
  27.     
  28.     'Value es la caja de texto en si
  29.     lista.Current.Value.SetFocus  
  30.   Endif  
  31.  



Saludos


Archivos adjuntos
.gz CajasDeTextoFocoCircular-0.0.1.tar.gz Tamaño: 12.5 KB  Descargas: 3

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#2

Prueba a sustituir todo el código por lo siguiente: - 

GAMBAS
  1. Public Sub CajasDeTexto_KeyPress()
  2.  
  3.   Dim hTBs As TextBox[] = [TextBox1, TextBox2, TextBox3, TextBox1]
  4.  
  5.   If Key.code = Key.Return Or Key.code = Key.Enter Then hTBs[hTBs.Find(Last) + 1].SetFocus
  6.  


[-] Los siguientes 1 usuarios dice gracias a cogier por este post:
  • Shell
    ¡Gracias!
#3

(01-09-2022, 15:45)cogier escribió:  Prueba a sustituir todo el código por lo siguiente: - 

Efectivamente. Era posible hacerlo de otra forma. Wink
Tu código está más optimizado que este último que iba a subir y que el primero.

Supongo que la lista indexada circular tendrá un mejor uso.
Tampoco conocía el componente gb.data

Este es el código que se me ocurrió para sustituir al primero que subí. Es que las cosas no salen a la primera. Tongue
Con lo sencillo que era con un array!.

GAMBAS
  1.  
  2. Public Sub Form_Open()
  3.  
  4.   lista = New TextBox[]
  5.  
  6.   lista.Insert([TextBox1, TextBox2, TextBox3])
  7.  
  8.  
  9. Public Sub CajasDeTexto_KeyPress()
  10.  
  11.   If Key.Code = Key.Enter Or Key.code = Key.Return Then
  12.     If indice = lista.Max Then
  13.       indice = 0
  14.     Else
  15.       indice += 1
  16.     Endif
  17.     lista[indice].SetFocus    
  18.  



Quizás este último código que muestro sea menos enrevesado por la sintaxis del método find del array, pero es más largo.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje
Último mensaje por Shell
28-06-2022, 19:39

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)