Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-07-2011
adrall adrall is offline
Miembro
 
Registrado: ene 2007
Posts: 94
Poder: 18
adrall Va por buen camino
Acceso a objetos/propiedades de otro Form

Haber si me podeis explicar esto que no entiendo:

Desde el Form1, el principal de la aplicacion, creo otro formulario, por ejemplo así:

Código Delphi [-]
uses Unit2;  // Incluyo la referencia en el Uses
...
procedure TForm1.Button1Click(Sender: TObject);
begin
with TForm2.Create(self) do
   begin
   ShowModal;
   Free;
   end;
end;
Si desde el Form2 quiero acceder a alguna objeto/propiedad del Form1, me basta con añadir en el Unit2 lo siguiente:
Código Delphi [-]
implementation 

uses Unit1;
Hasta aquí todo bien, si ahora vuelvo a crear otro form desde el Form2, así:
Código Delphi [-]
uses Unit3;  // Incluyo la referencia en Uses
...
procedure TForm2.Button1Click(Sender: TObject);
begin
with TForm3.Create(self) do
   begin
   ShowModal;
   Free;
   end;
end;
Si ahora quiero acceder a algun objeto el Form2 se supone que debo incluir:
Código Delphi [-]
implementation 

uses Unit2;
Pues no funciona, lanza una excepción EAccesViolation, y lo curioso es que en tiempo de diseño si que puedo acceder perfectamente a los objetos/propiedades del Form2. Es mas, si incluyo Unit1 en el uses puedo acceder sin problemas a los objetos del Form1.

Debo cometer algun error que no consigo ver.

Utilizo Delphi XE i Windows XP
Responder Con Cita
  #2  
Antiguo 29-07-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Y, ¿de qué manera intentas acceder a Form2 desde Form3? Yo creo que estás trantando de hacerlo usando la variable que crea delphi por defecto cuando añades un formulario a tu aplicación, pero cuando creas tu Form2 desde el principal, no estás usando dicha variable sino un objeto creado al vuelo.

// Saludos
Responder Con Cita
  #3  
Antiguo 29-07-2011
adrall adrall is offline
Miembro
 
Registrado: ene 2007
Posts: 94
Poder: 18
adrall Va por buen camino
Al crearse el Form2 se declara la variable:
Código Delphi [-]
var
  Form2: TForm2;
Todos las propiedades/funciones/etc. de ese Form creado en ejecucion se acceden sin problemas así:
Código Delphi [-]
  Form2.Funcion/Procedimiento/Propiedad ...;
Lo que no comprendo es porqué no puedo acceder a ellas desde el Form3 creado también en ejecución.
Responder Con Cita
  #4  
Antiguo 29-07-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Ya te comentó román el por qué. Si en ningún momento en tu código haces:

Código Delphi [-]
Form2 := TForm2.Create(nil);

Entonces al querer hacer:

Código Delphi [-]
Form2.Show;

Vas a obtener una bonita excepción en tiempo de ejecución.


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #5  
Antiguo 29-07-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por adrall Ver Mensaje
Todos las propiedades/funciones/etc. de ese Form creado en ejecucion se acceden sin problemas así:
Código Delphi [-]
  Form2.Funcion/Procedimiento/Propiedad ...;
Si esto fuera cierto entonces no habrías aberto este hilo. Obviamente sí tienes problemas.

Lo que debes entender es que no es lo mismo el form que se declara al añadir el formulario, que el que estás creando en TForm1.Button1Click. Otra cosa sería si pusieses:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(self);

with Form2 do
   begin
   ShowModal;
   Free;
   end;
end;

Porque aquí sí estás asignando a la variable Form2 el objeto que creas.

// Saludos
Responder Con Cita
  #6  
Antiguo 29-07-2011
adrall adrall is offline
Miembro
 
Registrado: ene 2007
Posts: 94
Poder: 18
adrall Va por buen camino
Aaaah! Claro! Ahora lo entiendo (bueno, más o menos), si declaro la variable Form2 en la Unit1 si que puedo acceder desde otras Unit.

Muchas gracias por su ayuda.

Saludos
Responder Con Cita
  #7  
Antiguo 30-07-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola adrall.
Cita:
Ahora lo entiendo (bueno, más o menos)
Lo que te explica román está clarísimo, tu código inicial es:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
   with TForm2.Create(self) do
   begin
     ShowModal;
     Free;
   end;
end;
Se crea una instancia de la clase TForm2, pero no fué asignada a ninguna variable, no hay forma de referenciarla si no es dentro del width de ese procedimiento.

Ahora comparalo con el código de román:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Form2 := TForm2.Create(self);
  with Form2 do
  begin
     ShowModal;
     Free;
  end;
end;
Ahora sí podes referenciar la instancia mediante la variable Form2.



Cita:
si declaro la variable Form2 en la Unit1 si que puedo acceder desde otras Unit
Siempre que esté declarada en la sección de interface de la Unit1 y la otras unidades incluyan a Unit1.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Propiedades y el Inspector de Objetos mcsebas OOP 6 18-02-2011 18:25:29
Crear una clase y asignar objetos como propiedades leanfreue OOP 4 13-04-2007 01:08:33
Acceso a las propiedades de un objeto desde el editor de propiedades Hugo OOP 0 24-11-2006 13:58:22
Accesar a las propiedades de otros objetos sharky Varios 2 08-12-2004 00:58:55
Problema acceso propiedades de un componente de otro formulario mguixot OOP 3 01-11-2004 02:40:09


La franja horaria es GMT +2. Ahora son las 16:44:47.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi