Buenas!.
En este ejemplo se trata de escribir la palabra "gambas" en todas las cajas de texto, evitando
los cambios de foco en los texboxes.
Código:
' Gambas class file
'Fuentes
'https://icon-icons.com
Const NUMCAJASDETEXTO As Integer = 4
Const PALABRA As String = "gambas"
Const TIEMPO As Integer = 400 'Cada 400 milisegundos cambia el foco
Private etiqueta1 As Label
Private etiqueta2 As Label
Private cajadetexto As TextBox
Private Timer1 As Timer
Private atextboxes As New TextBox[]
Private indice As Integer
Public Sub Form_Open()
Dim ocatexto As Object
Randomize
With Me
.Arrangement = Arrange.Vertical
.Spacing = True
.Margin = True
.Padding = 20
.AutoResize = True
End With
etiqueta1 = New Label(Me)
With etiqueta1
.Font = Font["Arial, 11, Bold"]
.Alignment = Align.Center
.Text = PALABRA
.H = 50
.W = 150
End With
For j As Integer = 0 To NUMCAJASDETEXTO - 1
cajadetexto = New TextBox(Me) As "Manipula"
With cajadetexto
.Font = Font["Arial, 18, Bold"]
.Alignment = Align.Left
.H = 50
.w = 150
End With
Next
etiqueta2 = New Label(Me)
With etiqueta2
.Font = Font["Arial, 11, Bold"]
.Alignment = Align.Center
.H = 50
.W = 150
End With
For Each ocatexto In Me.Controls
If ocatexto Is TextBox Then atextboxes.Add(ocatexto)
Next
indice = Rand(0, atextboxes.max)
atextboxes[indice].SetFocus()
Timer1 = New Timer As "Reloj"
Timer1.Delay = TIEMPO
Timer1.Start
End
Public Sub Reloj_Timer()
indice += Rand(-1, 1)
'Si indice es menor que cero
If indice < 0 Then
'Asignamos a indice el valor máximo del array de cajas de texto
indice = atextboxes.Max
'Si indice supera el valor máximo del array de cajas de texto
Else If indice > atextboxes.Max
'Asignamos el indice 0
indice = 0
Endif
'Ponemos el foco en el elemento del array atexboxes con valor indice
atextboxes[indice].SetFocus()
End
Public Sub Manipula_Change()
Dim ocatexto As Object
Dim cuenta As Integer
For Each ocatexto In Me.Controls
If ocatexto Is TextBox Then
'Si los caracteres de la cadena Palabra con longitud de ocatexto es distinto al texto de ocatexto
If Left(PALABRA, Len(ocatexto.text)) <> ocatexto.text Then
etiqueta2.Text = "Prueba no superada!"
Timer1.Stop
DeshabilitarTextBoxes()
Stop Event
Endif
'Si la cadena que tiene ocatexto es igual a PALABRA entonces cuenta uno más
If ocatexto.Text = PALABRA Then cuenta += 1
Endif
Next
'Si cuenta es igual al número de cajas de texto
If cuenta = atextboxes.Count Then
etiqueta2.text = "Prueba Superada!"
Timer1.Stop
DeshabilitarTextBoxes
Stop Event
Endif
cuenta = 0
End
Public Sub DeshabilitarTextBoxes()
Dim ocatexto As Object
'Deshabilitamos cada una de las cajas de texto del formulario
For Each ocatexto In Me.Controls
If ocatexto Is TextBox Then ocatexto.Enabled = False
Next
End
Me hubiera gustado usar .Next o .Previous en el evento Timer, pero de la forma que lo hice es más difícil ganar ya que es más aleatorio.
Ah, si, no se usa el ratón. Debería haber deshabilitado el uso de ratón si es que es posible.
Saludos