Visual Basic - Modificar un TextBox dentro de un bucle

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Modificar un TextBox dentro de un bucle

Publicado por Carlos (4 intervenciones) el 05/12/2021 12:09:25
De antemano decir que mis conocimientos de VB son muy pocos. Estoy programando dentro de una hoja de Excel
Tengo un bucle que se repite 10 veces dentro del cual modifico el color de fondo de un TextBox. El caso es que el TextBox sólo se colorea al final del bucle o se colorea las 10 veces si pongo un breakpoint en el bucle.
No consigo que el TextBox vaya alternando el verde y el rojo hasta que contadorg del bucle llegue a 10.
Un saludo

Private Sub CommandButton1_Click()
continuar = True
TextBox1.Enabled = True

For contadorg = 0 To 10
For i = 1 To 2000
contador = 0
While contador < 5000
contador = contador + 1
Wend
Next i
Call colorear
Next contadorg
End Sub

Private Sub colorear()
If estado = True Then
TextBox1.BackColor = RGB(0, 255, 0)
TextBox1.Text = contadorg
estado = False
Else
TextBox1.BackColor = RGB(255, 0, 0)
TextBox1.Text = "0"
estado = True
End If

End Sub
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 Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Modificar un TextBox dentro de un bucle

Publicado por Andres Leonardo (1798 intervenciones) el 06/12/2021 14:30:07
El tema creo que es tan rapido que no ves el alternar
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

Modificar un TextBox dentro de un bucle

Publicado por Carlos Maneiro (4 intervenciones) el 06/12/2021 16:06:49
Si aumento los valores del contador de forma que el ciclo completo dure unos 10 segundos, sólo el cambio de color al final del ciclo pero no los intermedios.
Muchas 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
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Modificar un TextBox dentro de un bucle

Publicado por Antoni Masana (558 intervenciones) el 06/12/2021 18:55:51
Añade exto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Sub CommandButton1_Click()
    continuar = True
    TextBox1.Enabled = True
 
    For contadorg = 0 To 10
        For i = 1 To 2000
            contador = 0
            While contador < 5000
                contador = contador + 1
            Wend
        Next i
        Call colorear: DoEvents
    Next contadorg
    End Sub
 
Private Sub colorear()
    If estado = True Then
        TextBox1.BackColor = RGB(0, 255, 0)
        TextBox1.Text = contadorg
        estado = False
    Else
        TextBox1.BackColor = RGB(255, 0, 0)
        TextBox1.Text = "0"
        estado = True
    End If
End Sub


He probado lo que te he puesto más arriba y no cambia el color

Prueba esto, no cambia el color por que hay algo que esta mal en el color:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub CommandButton1_Click()
    continuar = True
    TextBox1.Enabled = True
 
    For ContadorG = 0 To 10
        Tm = Timer + 0.5
        While Tm > Timer
            DoEvents
        Wend
        Call colorear(ContadorG): DoEvents
    Next ContadorG
    End Sub
 
Private Sub colorear(G)
    If estado = True Then
        TextBox1.BackColor = RGB(0, 255, 0)
        TextBox1.Text = ContadorG
        estado = False
    Else
        TextBox1.BackColor = RGB(155, 0, 0)
        TextBox1.Text = "0"
        estado = True
    End If
    TextBox1.Text = G
End Sub


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Modificar un TextBox dentro de un bucle

Publicado por Carlos Maneiro (4 intervenciones) el 07/12/2021 09:53:30
Hola Antoni:
Muchas gracias por tu ayuda. Parece que la introducción de DoEvents ha sido la llave de la solución. Aunque lo conocía de oídas no sé exactamente qué hace. Lo miraré en Internet.
Muchas gracias por tu ayuda.
Un saludo
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 Jose A.
Val: 2
Ha aumentado su posición en 20 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Modificar un TextBox dentro de un bucle

Publicado por Jose A. (2 intervenciones) el 06/12/2021 19:30:08
¿y dos textbox, cada uno con su color, con el mismo valor, uno encima del otro, uno visible, el otro no, y que cada cierto tiempo, alternar que sean visible o no?
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

Modificar un TextBox dentro de un bucle

Publicado por Carlos (4 intervenciones) el 07/12/2021 09:56:13
Hola Jose:
Muchas gracias por tu ayuda. Entiendo que tu solución podría ser válida.
Me voy a quedar con la solución de Antoni pues hace lo que yo pensaba que tenía que hacer.
Un saludo.
Carlos
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: 145
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Modificar un TextBox dentro de un bucle

Publicado por Sah1d Ra (191 intervenciones) el 07/12/2021 21:19:45
Hola, procurare hacer algo sin el DoEvents

Espero te sirva, ocupas un control command, un textbox y un timer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Option Explicit
 
Private Sub Command1_Click()
 If Command1.Caption = "Iniciar" Then
  Command1.Caption = "Parar": Timer1.Tag = ".": Text1.BackColor = vbGreen: Timer1.Interval = 100
 Else
  Command1.Caption = "Iniciar": Text1.BackColor = vbRed: Timer1.Interval = 0
 End If
End Sub
 
Private Sub Form_Load()
 Command1.Caption = "Iniciar"
End Sub
 
Private Sub Timer1_Timer()
 If Len(Timer1.Tag) > 10 Then
  Command1_Click
 Else
  Text1.Text = CStr(Len(Timer1.Tag)): Timer1.Tag = Timer1.Tag + "."
  Text1.BackColor = IIf(Text1.BackColor = vbGreen, vbRed, vbGreen)
 End If
End Sub

Saludos y felices líneas de programa10n.
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