Ver Mensaje Individual
  #6  
Antiguo 12-06-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Reputación: 30
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