 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Lun 24 Mar, 2003 5:48 pm Asunto: Necesito pasar un dato a uno de varios formularios. |
|
|
Chicos a ver si me podeis ayudar, sé que esta pregunta quizás sea algo tonta, pero a veces no caigo en las pequeñas sutilezas.
Vamos a ver, tengo varios formularios, llamemosles form1, form2, form3, etc. y luego tengo otro formulario llamado form_gen.
Desde form1 o form2 o form3 o form...... se puede llamar a form_gen,
con "se puede llamar" me refiero que a partir de esos formularios y mediante NEW y ShowModal se crea el formulario form_gen, el cual genera cierto dato y entonces tiene que introducirlo en una variable que tienen los formularios form1, form2, form3.... llamada dato. La historia es que quiero hacer esto de forma de que le inserte el dato al formulario que llamo al formulario form_gen. Comprendeis ?
He intentado con la propiedad Owner, pero no me funciona, es decir:
| Código: | this->Owner->dato="dato generado"; |
Pero no funciona, me da un error al compilar.
Que me podeis decir ?
Gracias. |
|
| Volver arriba |
|
 |
_Tugui Invitado
|
Publicado: Mar 25 Mar, 2003 12:39 am Asunto: |
|
|
No se si te habré entendido bien pero me da la impresión de que lo que tienes que hacer es interactuar con variables globales en todos los formularios, veamos:
en el form_gen.h en la parte public declaramos una variable que contendrá los datos que se generan al mostrar o crear este formulario, por ejemplo:
AnsiString datos;
Cuando llames al formulario preocúpate de que esta variable se rellene con los datos que te interesen, por ejemplo:
Form2->datos = "estos son los datos.";
Si lo que queremos es pasar los datos de la variable datos del Form2 a otra variable que se encuentra en el Form1 creamos la variable del Form1 en la parte public de su archivo de cabecera por ejemplo en el Unit1.h:
AnsiString datForm1;
Y un ejemplo de como asignar el valor de la variable del Form2 a la variable del Form1 sería algo así, supongo:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//al clickar en un botón del Form1...
Form2 = new TForm2(this);
//Asignamos valor a la variable del Form2
Form2->datos = "Estos son los datos";
//El valor de la variable del Form2 pasa a la variable del Form1
datForm1 = Form2->datos;
Form2->ShowModal();
delete Form2;
}
Espero que te sirva  |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Mar 25 Mar, 2003 1:20 pm Asunto: |
|
|
No me he explicado convenientemente por lo visto, no es esa la solución que busco.
Lo que me estas explicando ya sabía hacerlo y no hay ningun problema yo lo que quiero es pasarle un dato al formulario que llamo a este formulario, comprendes ? Es decir hasta que el programa no este en ejecución yo no se quien ha creado form_gen, en el momento de la ejecución entonces es cuando ya se si el que ha creado a form_gen, ha podido ser form1, form2, o quien sea.
Entonces una vez en ejecución yo quiero introducir en una variable del formulario padre un dato. Por lo que yo no puedo referirme a el como form1, ni form2, ni formx.... ya que no se cual será, imagino que habrá que hacer uso del "parent" o "owner" comprendes ? pero no por lo visto no lo estoy haciendo bien porque no me funciona.
imaginate esto:
formulario1
int dato;
formulario2
int dato;
Desde form1 y form2 se crea un tercer formulario, llamado form_gen:
entonces lo que yo quiero hacer es cuando se cierre form_gen introducir cierto contenido en la variable "dato" del formulario que me creo, es decir si es formulario1, pues formulario1->dato="dato generado" si es el formulario2, pues formulario2->dato="dato generado". El problema es que yo no puedo poner esas lineas de codigo, pues, no se a partir de cual de ellos se creo form_gen, comprendes ? entonces yo imaginaba que sería algo asi como parent->dato="dato generado" o owner->dato="dato generado" pero da un error de compilación.
Espero haberme explicado mejor de lo que quiero conseguir.
Gracias de todos modos por tus indicaciones. |
|
| Volver arriba |
|
 |
jaquemate Lt Cmdr


Registrado: 30 Sep 2002Mensajes: 110
|
Publicado: Mar 25 Mar, 2003 6:01 pm Asunto: jaquemate |
|
|
Bueno, a mi parecer el error que te da al compilar es normal, ya que estas accediendo a una propiedad que no existe en el objeto Owner que es de tipo TComponent*
Tampoco puedes hacer un cast (molde) porque no sabes a priori a qué formulario quieres hacerle el molde.
Una solución poco elegante es usar la propiedad Tag que está en todos los componentes incluidos los formularios y es de tipo int. En esta propiedad puedes guardar cualquier valor entero pero tiene la pega que sólo puedes guardar valores numéricos.
Otra solución sería usar una clase común llamada por ejemplo TFormDato que incluyera la propiedad Dato y luego mediante herencia hacer que form1, form2, form3 heredaran directamente de esa clase. Cuando quieras acceder a la propiedad Dato desde form_gen, pues harías:
| Código: | ((TFormDato*) Owner)->Dato = "dato generado"; |
Bueno, espero haberte ayudado en algo.
Un saludo. |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|