Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-06-2008
Mayacker Mayacker is offline
Registrado
 
Registrado: jun 2008
Posts: 4
Poder: 0
Mayacker Va por buen camino
Question checkBox ayuda

Hola amigos estoy haciendo un formulario donde estoy utilizando 6 checkbox y tengo uno donde tiene la opcio de Todo y quiero si seleccionan Todo que se seleccionen los demas checkbox como puedo hacer esto gracias de antemano
Responder Con Cita
  #2  
Antiguo 11-06-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Prueba lo siguiente y nos cuentas como te va :

Código:
 
Integer i;
 for (i = 0; i < this->ComponentCount; i++) {
  dynamic_cast<TCheckBox*>(Components[i])->Checked = True;
 }
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 11-06-2008
Mayacker Mayacker is offline
Registrado
 
Registrado: jun 2008
Posts: 4
Poder: 0
Mayacker Va por buen camino
Talking

Cita:
Empezado por jhonny Ver Mensaje
Prueba lo siguiente y nos cuentas como te va :

Código:
 
Integer i;
 for (i = 0; i < this->ComponentCount; i++) {
  dynamic_cast<TCheckBox*>(Components[i])->Checked = True;
 }
Genial me funciono, gracias por tu pronta ayuda
Responder Con Cita
  #4  
Antiguo 11-06-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por Mayacker Ver Mensaje
Genial me funciono, gracias por tu pronta ayuda
Que bien , me alegra... aunque mirandolo mejor, si en el futuro necesitas que al presionar dicho CheckBox también se inhabiliten los demás, podrías usarlo así:

Código:
Integer i;
 for (i = 0; i < this->ComponentCount; i++) {
  dynamic_cast<TCheckBox*>(Components[i])->Checked = CheckBox1.Checked;
 }
Donde CheckBox1 es el TCheckBox que dice "Seleccionar Todos" .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #5  
Antiguo 11-06-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Perdonar un inciso. Puede ocurrir un error si un componente Components[i] no es del tipo TCheckBox siendo, entonces, dynamic_cast<TCheckBox*>(Components[i]) un puntero nulo. Si ocurre el resto del código no puede funcionar. Esto puede suceder si en el formulario hay mas controles en la lista de componentes que no sean TCheckBox.

Yo para evitar el error, y hacer el código mas seguro, compruebo la no nulidad del puntero:

Código:
  for (int i = 0; i < this->ComponentCount; i++) {
   TCheckBox* Check = dynamic_cast<TCheckBox*>(Components[i]);
   if(Check) Check->Checked = CheckBox1.Checked;
 }
Saludos

Última edición por escafandra fecha: 12-06-2008 a las 20:50:15.
Responder Con Cita
  #6  
Antiguo 12-06-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por escafandra Ver Mensaje
Perdonar un inciso. Puede ocurrir un error si un componente Components[i] no es del tipo TCheckBox siendo, entonces, dynamic_cast<TCheckBox*>(Components[i]) un puntero nulo. Si ocurre el resto del código no puede funcionar. Esto puede suceder si en el formulario hay mas controles en la lista de componentes que no sean TListBox

Yo para evitar el error, y hacer el código mas seguro, compruebo la no nulidad del puntero:

Código:
  for (int i = 0; i < this->ComponentCount; i++) {
   TCheckBox* Check = dynamic_cast<TCheckBox*>(Components[i]);
   if(Check) Check->Checked = CheckBox1.Checked;
 }
Saludos

Cierto, de hecho muy interesante, yo no tenia idea que se podían declarar punteros de esa forma en C++ Builder... por otro lado... quizá también sea interesante la siguiente solución que simplemente reemplaza dynamic_cast por el reinterpret_cast, haciendo uso de los distinto tipos de cast que tiene C++ Builder:

Código:
 
 Integer i;
 for (i = 0; i < this->ComponentCount; i++) {
  reinterpret_cast<TCheckBox*>(Components[i])->Checked = CheckBox6->Checked;
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 12-06-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Pues este tipo de conversión resulta peligroso. Se trata de una variante de conversión o cast por fuerza bruta, sin tener en cuanta si lo que convertimos es o no factible. Sería algo parecido a la conversión: *(Tipo*)(&Otrotipo)

Es decir puedo convertir un TEdit a un TComBobox por las buenas pero sólo sintácticamente, para que el compilador no proteste. La realidad es que obtendré un error en tiempo de ejecución en cuanto llame a una propiedad o función que no corresponda.

dynamic_cast y static_cast hacen la conversión de punteros, pero si realmente el tipo es erróneo (convertir TComboBox a TEdit, por ejemplo) entonces devuelven un puntero nulo.

Para usar reinterpret_cast o la clasica *(Tipo*)(&Otrotipo) debemos estar muy seguros de lo que hacemos, de lo contrario tendremos un grave error de punteros.

En este caso, creo que lo más adecuado es:
Código:
for (int i = 0; i < this->ComponentCount; i++) {
   TCheckBox* Check = dynamic_cast<TCheckBox*>(Components[i]);
   if(Check) Check->Checked = CheckBox1.Checked;
}
o, también:
Código:
for (int i = 0; i < this->ComponentCount; i++) {
   TCheckBox* Check = static_cast<TCheckBox*>(Components[i]);
   if(Check) Check->Checked = CheckBox1.Checked;
}
Mirad estas referencias: reinterpret_cast, dynamic_cast, static_cast.

Saludos.
Responder Con Cita
  #8  
Antiguo 12-06-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
mmm, entendido, muchas gracias por tu explicación escafandra .
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
checkbox Lupita Varios 6 07-04-2008 15:12:53
ayuda error mysql y checkbox solidus128 Conexión con bases de datos 5 24-08-2007 23:25:00
ayuda con el checkbox Debian Conexión con bases de datos 4 11-04-2005 18:59:04
ayuda con el checkbox Debian Conexión con bases de datos 1 11-04-2005 09:45:24
checkbox superhopi OOP 3 12-05-2003 10:32:46


La franja horaria es GMT +2. Ahora son las 23:33:23.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi