Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problemas con variables goblales

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problemas con variables goblales Responder citando

Tengo un Formulario padre en el que he declarado dos variables globales
Variable1,Variable2.
En cierto momento desde el formulario padre accedo a un formulario hijo mediante Showmodal, conteniendo la Variable1 y Variable2 unos valores..
El problema surge cuando regreso al formulario Padre que las dos variables Globales Variable1 y Variable2 han perdido sus valores.

Código:


  //Variable1 = 1, Variable2 =2;//


 void_fastcall  FormPadre::IrFormHijo()
 {
   
   visible = false;

   TFormHijo *ver;

   ver = New TFormHijo(this);

  switch (ver->ShowModal())
    {
       case mrOk:
              Visible = true;
       break;
    }   

  delete Ver;


  //Variable1 = 0; Variable2 = 0; //

  }




¿Se pueden conservar los valores ?

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola neg 1414
normanlmente la variable globales se pnen en:

#pragma package(smart_init)
TfrmMain *frmMain;

//aca van las variabbles globales

//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner)
: TForm(Owner)
{

}



pero si deseas que otros form ascedan a esa variable haz lo siguiente
en el form2 en las variables globales pon extern VARIABLE_QUE_ESTA _EN _FORM_1 ; y listo
Ejemplo

Form 1.....
//variable global
Código:
int my_Var = 4;


Form 2
//variable global
Código:
extern int my_Var;

//boton
Código:
ShowMessage(my_Var);


yo en lo personal (y no se si es buena practica o no ) declaro las variables que utilizaran otros form en el public del .h
espero haberte entendido y respondido
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

En primer lugar gracias por contestar...
Leyendo tu respuesta creo que me he explicado mal:
Las variables globales las he declarado en el private del .h del Form Padre.
Estas variables globales NO van ser utilizadas en el Form Hijo.
Mi problema radica en que estas variables globales que tienen un valor antes de llamar al form Hijo,lo pierden (sin ser utilizadas en el form Hijo) una vez vuelve el control al Form Padre.

Espero Haberme Explicado esta vez bien.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

mira lo unico que te puedo sugerir, ya que tu caso me parece de lo mas raro, es que delante de la variables pongas static
ejemplo:
.h
Código:
static int my_Variable;

luego me dices...
saludos y suerte
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Las variables tal como dices que las declaras, solos estan accesibles en el form padre, la llamada al form hijo no afecta para nada a dichas variables. Solo podrias manipularlas en el form hijo a través de métodos del form padre accesibles (y llamados) por el form hijo.

Yo creo que el error es porque ejecutas algun evento (onshow?) del form padre donde manipulas las variables y no lo tienes controlado.

Saludos
Juanma
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Creo que he dado con el problema...
En mi codigo podreis ver que la Propiedad Visible del Formulario Padre la pongo a false, con ello muestro el formulario Hijo cuando lo "llamo" sin que se vea el formulario Padre ..Una vez salgo del formulario Hijo vuelvo a mostrar el formulario Padre mediante
Código:
Visible = true;
es en ese momento cuando se inicializan las variables Goblales del Formulario Padre(no se por que)...
Alguna idea para hacer lo mismo sin que tenga este problema

Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola neg1414, una forma rapida seria crear la variable en la parte publica del formulario padre, y puedes inicializar con el valor que requieras en el constructor, o mejor crea en la parte private y agrega dos métodos public: "void SetTalCosa(int num)" y un "int GetTalCosa()" así seguís uno de los alineamientos de la programación orientada a objeto, encasulaminto.
saludos tor.
_________________
Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr)
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Gracias por contestar....

Tor creo entender lo que me sugieres pero surge un problema: las variables Globales no tienen siempre el mismo valor cada vez que se "llama" al form Hijo.
Me explico con un ejemplo (Que son siempre mas didacticos) Imagina que tengo un Formulario Padre con una variable Global int Color que indican el color del form ( En principio Color=0 Gris ) Segun las operaciones que hago en el Form Padre este el valor de la variable global cambia y con ellos el color del form (1=Rojo,2=verde...).
En un momento en el que la variable Global indica que el color del form es Rojo Color=1, llamo al form Hijo y hago "No visible al Form Padre".
Opero en el Form Hijo (sin hacer referencia a la variable global "color").Al terminar cierro el form Hijo y vuelvo al Form Padre..Una vez con el Foco en el Form Padre (PERO AUN NO VISIBLE) ,La varaible Global Color sigue correspondiendose con el color Rojo Color=1, pero en el momento en que hago visible el Form Padre la variable Global toma Siempre el mismo valor (Color=0 Gris)
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.