TODOPIC
Lenguajes de programación para PC => Visual Basic => Mensaje iniciado por: karlss en 15 de Junio de 2006, 05:56:35
-
La cuestión, es muy simple, pero parece ser que no doy con la tecla.
El caso es q quiero un checkbox que cuando lo pulse tome un valor, y cuando no este pulsado tome otro.
El problema es que al pulsarlo me da el valor deseado, pero cuando vuelvo a cliquear para desmarcar el checkbox es como si no cogiera el dato y se mantuviera en el valor que adquirio cuando estaba marcado el checkbox.
El codigo es el siguiente:
Private Sub Check1_Click()
If nro_nousado = Fase Then
nro_nousadoFase = True
End If
If nro_nousado = True Then
nro_nousadoFase = False
End If
End Sub
-
No sé si será porque en tu código dice "Fase" cuando debería decir "False".
En cualquier caso, creo que yo lo haría así, y probablemente te sirva:
Private Sub Check1_Click()
nro_nousado=check1.value
End Sub
-
Private Sub Check1_Click()
If nro_nousado = Fase Then
nro_nousadoFase = True
End If
If nro_nousado = True Then
nro_nousadoFase = False
End If
End Sub
Bueno, Nocturno te ha pasado la mejor opcion.
Y yo te voy a explicar por que no te funcionaba:
Supongamos que inicializas nro_nousadoFase a False, ¿bien?
Ahora presionas el checkbox y se ejecuta:
If nro_nousado = False Then
nro_nousadoFase = True
End If
Esto es lo mismo que preguntar: ¿nro_nousado es Falso? Como dije que habiamos inicializado nro_nousadoFase = False, la condicion se cumple, por lo que ahora, nro_nousadoFase = True.
Luego de esto, se ejecuta el siguiente codigo:
If nro_nousado = True Then
nro_nousadoFase = False
End If
Como nro_nousadoFase ahora valia True, la condicion se vuelve a cumplir, dando como resultado nro_nousadoFase = False.
Supongamos que inicializas nro_nousadoFase a True, ¿bien?
Ahora presionas el checkbox y se ejecuta:
If nro_nousado = False Then
nro_nousadoFase = True
End If
Esto es lo mismo que preguntar: ¿nro_nousado es Falso? Como dije que habiamos inicializado nro_nousadoFase = True, la condicion NO se cumple, por lo que nro_nousadoFase sigue valiendo True.
Luego de esto, se ejecuta el siguiente codigo:
If nro_nousado = True Then
nro_nousadoFase = False
End If
Como nro_nousadoFase vale True, la condicion se cumple, dando como resultado nro_nousadoFase = False.
Resumiendo: El comportamiento del programa que hiciste es este:
Si nro_nousadoFase ingresa valiendo True, luego de salir del algoritmo, nro_nousadoFase = False. Hasta aqui bien.
Si nro_nousadoFase ingresa valiendo False, luego de salir del algoritmo, nro_nousadoFase = False. Y aqui es donde no se invierte mas...y esta el error.
Podrias haber hecho:
Private Sub Check1_Click()
If nro_nousado = Fase Then
nro_nousadoFase = True
else
nro_nousadoFase = False
End If
End Sub
Y hubiese funcionado tal cual te ha puesto el ejemplo Nocturno.
O bien:
Private Sub Check1_Click()
If nro_nousado = Fase Then
nro_nousadoFase = True
exit sub
End If
If nro_nousado = True Then
nro_nousadoFase = False
End If
End Sub
tambien hubiese funcionado. Son 2 alternativas, aunque lo que te dijo Nocturno es lo que yo siempre hago y es la mejor solucion.
Saludos.
-
Muchas gracias a los dos por responder tan rápido, con vuestra explicación se solucionó el problema.