Autor Tema: Ayuda con checkbox  (Leído 2315 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado karlss

  • PIC10
  • *
  • Mensajes: 6
Ayuda con checkbox
« 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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Ayuda con checkbox
« Respuesta #1 en: 15 de Junio de 2006, 06:23:39 »
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

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Ayuda con checkbox
« Respuesta #2 en: 15 de Junio de 2006, 09:33:37 »
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.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado karlss

  • PIC10
  • *
  • Mensajes: 6
Re: Ayuda con checkbox
« Respuesta #3 en: 16 de Junio de 2006, 05:13:09 »
Muchas gracias a los dos por responder tan rápido, con vuestra explicación se solucionó el problema.