PDA

Ver la Versión Completa : Problemas al acceder a componentes de formularios en tiempo de ejecución


MAXIUM
26-11-2018, 04:59:32
Hola, tengo el siguiente problema

Este es el código que va dentro de un Botón para crear un formulario en tiempo de ejecución (Form1)
With TForm2.Create(Self) Do
Try
ShowModal;
Finally
Free
End;


Ahora el problema ocurre cuando quiero acceder a un componente de este Form2. Sea desde el mismo Form u otro.

El siguiente ejemplo genera un error en tiempo de ejecución

Form2.Button1.Enable:= True;

¿Se ha visto antes?

De antemano, muchas gracias.

Casimiro Notevi
26-11-2018, 07:59:47
¿Cómo creas el Form?
¿Dónde le das el nombre, el parent, etc.?

escafandra
26-11-2018, 08:23:28
Hola, tengo el siguiente problema
Form2.Button1.Enable:= True;


Ese es el error.
1. Cuando se diseña un formulario para ser creado dinámicamente por código, se debe definir como NO autocreado, ahorrarás recursos
2. Cuando lo creas, la variable Form2 no apunta al formulario creado dinámicamente sino al estático o a nada.
3. No esperes, por tanto, que esa linea de código funcione ni ninguna otra que trate de acceder a un componente de ese formulario, dentro o fuera, a través de Form2.
4. Si precisases alcanzar un componente de TForm2 deberás declarar una variable de ese tipo y asignarle el Form creado.


Saludos.

MAXIUM
26-11-2018, 12:52:28
Ese es el error.
1. Cuando se diseña un formulario para ser creado dinámicamente por código, se debe definir como NO autocreado, ahorrarás recursos
2. Cuando lo creas, la variable Form2 no apunta al formulario creado dinámicamente sino al estático o a nada.
3. No esperes, por tanto, que esa linea de código funcione ni ninguna otra que trate de acceder a un componente de ese formulario, dentro o fuera, a través de Form2.
4. Si precisases alcanzar un componente de TForm2 deberás declarar una variable de ese tipo y asignarle el Form creado.


Saludos.
Muchas gracias por las respuestas.

Puedes darme un ejemplo para tenerlo más claro. De antemano, muchas gracias ^\||/

4. Si precisases alcanzar un componente de TForm2 deberás declarar una variable de ese tipo y asignarle el Form creado.

Caminante
26-11-2018, 14:50:45
Hola

Prueba asi

Form2:=TForm2.Create(Self);
With form2 Do
Try
ShowModal;
Finally
Free;
End;