| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Lun 24 Ago, 2009 5:09 pm Asunto: Problemas con variables goblales |
|
|
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 |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Lun 24 Ago, 2009 6:17 pm Asunto: |
|
|
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
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 |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Lun 24 Ago, 2009 8:01 pm Asunto: |
|
|
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 |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Lun 24 Ago, 2009 8:29 pm Asunto: |
|
|
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 |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Mar 25 Ago, 2009 8:59 am Asunto: |
|
|
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 |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Mar 25 Ago, 2009 4:29 pm Asunto: |
|
|
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 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 |
|
 |
Tor Master


Registrado: 22 Mar 2005Mensajes: 269Ubicación: obera, misiones, argentina
|
Publicado: Mie 26 Ago, 2009 6:00 am Asunto: |
|
|
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 |
|
 |
neg1414 Master

Registrado: 31 Ene 2007Mensajes: 284
|
Publicado: Mie 26 Ago, 2009 3:53 pm Asunto: |
|
|
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 |
|
 |
|