Programación General > C++ Builder
No encuentro el fallo... me supera
(1/1)
ruben14:
Buenas llevo una semana intentando dar con un error y no doy...Para la consulta he reducido el codigo lo mas que he podido para hacerlo mas legible, por lo cual la Aplicacion carece totalmente de sentido pero escenifica perfectamente el problema.
He creado una Clase Opciones
--- Código: C++ --- class TOpcionesprivate: bool *OpcActivas; //Vector Booleano public : TOpciones(); /Constructor TOpciones(const TOpciones &f); //Constructor Copia TOpciones&operator=(const TOpciones&f); //Sobrecarga operador Asignacion //Procedimientos void ActivarOpcion(char NOpc); bool LeerOpcion(char NOpc);};end //---------------------------------------------------------------------------TOpciones::TOpciones{ //Inicializo Vector OpcActivas = new bool [10]; for(int a=0;a<10;a++){OpcActivas[a] = false;}} //---------------------------------------------------------------------------TOpciones::TOpciones(const TOpcionesc &f){ *this = f;} //---------------------------------------------------------------------------//COPIATOpciones & TOpciones::operator=(const TOpciones &f){ if(OpcActivas){delete[]OpcActivas;} FiltrosAct = new bool [10]; memcpy(OpcActivas,f.OpcActivas,10 *sizeof(bool)); //Copio Vector return *this;} //---------------------------------------------------------------------------void TFiltrOpc::ActivarOpcion(char NOpc){ OpcActivas[ NOpc] = true;} //---------------------------------------------------------------------------bool TFiltrOpc::LeerOpcion(char NOpc){ return OpcActivas[ NOpc];}
Tengo tengo un Form1 que contiene un TCOMBOBOX (0,1) , un TBOTON (BotGenerar) un TGROUPBOX (vacio) ademas posee una Variable Objeto TOpciones ....
--- Código: C++ ---Clase TForm1: PUBLIC TForm{private: Opciones * TOpciones; ......}end; void __fastcall TForm1::FormShow(TObject *Sender){ //inicializo Combo->Clear(); Combo->Items->Add(0);Combo->Items->Add(1); Combo->ItemIndex = 0; Opciones = new TOpciones;} //---------------------------------------------------------------------------void __fastcall TForm1:: ComboChange(TObject *Sender){ GroupBox->Font->Color = clNavy; if(OpcFiltros->LeerOpcion(1)) { BotGenerar->Visible = false; ///AQUI SE PRODUCE EL ERRORRR for(int a=1;a<1000000000;a++){int o=o+1;} //Bucle espera } BotGenerar->Visible = true;} //---------------------------------------------------------------------------void __fastcall TForm1::BotGenerarClick(TObject *Sender){ TForm2 *Form2 = new TForm2(this,OpcFiltros); switch (Form2->ShowModal()) { case mrOk: { Opciones = Filtro->LeeOpcionesModifIcadas(); //Leeo Opcione modificadas break; } } delete TForm2;Combo->ItemIndex = 0;GroupBox->Font->Color = clSilver ;}
Por ultimo tengo un Form2 (al que accedo desde Form1) donde le paso como parametro el puntero TOpciones del que hago una copia la cual modifico, y salgo al Pulsar un Boton Salir que posee....
--- Código: C++ ---class TForm2 : public TForm{ __published: TButton *BSalir; void __fastcall BSalirClick(TObject *Sender); public: // User declarations __fastcall TFFiltros(TComponent* Owner,TOpciones *Op); TOpciones *LeeOpcionesModifIcadas(); private: // User declarations TOpciones *Opciones2; //Objeto Opciones cOPIA};end __fastcall TForm2::TForm2(TComponent* Owner,TOpciones *OP) : TForm(Owner){ //Asigno Opciones en Filtros Opciones2 = new TOpciones(*OP); //COPIO Opciones2->ActivarOpcion(1); //Modifico Opcion} //----------------------------------;-----------------------------------------TFiltrOpc *TFFiltros::LeeOpcionesModifIcadas(){ return Opciones2;} //---------------------------------------------------------------------------void __fastcall TFFiltros::BSalirClick(TObject *Sender){ ModalResult= mrOk;}
Ejecuto la aplicacion...En Form1 Selecciono en el ComboBox el valor uno, se muestra en pantalla el boton Generar y lo "acciono" Se habre el Form2 al que se le pasa el parametro puntero Opciones, al cual le hago una copia que modifico automativamente.Pulso el boton salir..Salgo del Form2 Se muestra el Form1 que Lee el Objeto Opciones modificado.
El Problema Surge hora... vuelvo a seleccionar el valor 1 del ComboBox y !!DESAPARECE DE LA PANTALLA EL TGROUPBOX !!!
Creo que el problema tiene que ver con el puntero OPciones ya que si elimino la siguiente linea del procedimiento BotGenrear de la classe Form1 funciona
--- Código: C++ ---Opciones = Filtro->LeeOpciones(); //Leeo Opcione modificadas
Si elimino la siguiente linea del mismo procedimiento tambien funciona
--- Código: C++ ---GroupBox->Font->Color = clSilver
Alguna ide Gracias
Navegación
Ir a la versión completa