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 27-11-2011
alexisenp alexisenp is offline
Registrado
NULL
 
Registrado: nov 2011
Posts: 3
Poder: 0
alexisenp Va por buen camino
Acceder a componentes de otro form

Hola, espero me puedan ayudar con este problema que tengo

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

Código:
uses Unit2;  // Incluyo la referencia en el Uses
...
procedure TForm1.Button1Click(Sender: TObject);
var f2 : Tform2;
begin
  f2:= TForm2.Create(self);
  try
     f2.ShowModal;
  finally
     f2.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:
implementation 

uses Unit1;
Hasta aquí todo bien, si ahora vuelvo a crear otro form desde el Form2, así:
Código:
uses Unit3;  // Incluyo la referencia en Uses
...
procedure TForm2.Button1Click(Sender: TObject);
var f3 : Tform3;
begin
   f3:=TForm3.Create(self);
   try
      f3.ShowModal;
   finally
      f3.Free;
   end;
end;
Para acceder a algun objeto el Form2 desde el Form3 incluí:
Código:
implementation 

uses Unit2;
Ahora al intentar asignarle un texto a un edit del Form2 desde el Form3, 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 del form 3 si que puedo asignarle valores a los edit del Form1 sin problemas.

Intente crear la variable de tipo Form2 en el interface del Form1 para luego incluir el Unit1 en el Form3 y poder acceder de la forma:
Código:
f2.edit1.text :='algo'
pero tambien da problemas.

Debo cometer algun error que no consigo ver.
Espero puedan ayudarme, de antemano gracias.

Utilizo Delphi XE y Windows 7
Responder Con Cita
  #2  
Antiguo 27-11-2011
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
Y pregunto, de donde tratas de acceder a objetos de Form2 desde Form3? Es decir, al hacer click en algun boton de Form3, en el OnCreate?

Por ahi viene por ese lado la cosa...


PD: Mis disculpas por la ortografia pero estoy en un teclado en ingles...
Responder Con Cita
  #3  
Antiguo 27-11-2011
beginner01 beginner01 is offline
Miembro
NULL
 
Registrado: mar 2011
Ubicación: República Dominicana
Posts: 181
Poder: 14
beginner01 Va por buen camino
Cita:
Empezado por alexisenp Ver Mensaje
Hola, espero me puedan ayudar con este problema que tengo

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

Código:
uses Unit2;  // Incluyo la referencia en el Uses
...
procedure TForm1.Button1Click(Sender: TObject);
var f2 : Tform2;
begin
  f2:= TForm2.Create(self);
  try
     f2.ShowModal;
  finally
     f2.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:
implementation 
uses Unit1;
Hasta aquí todo bien, si ahora vuelvo a crear otro form desde el Form2, así:
Código:
uses Unit3;  // Incluyo la referencia en Uses
...
procedure TForm2.Button1Click(Sender: TObject);
var f3 : Tform3;
begin
   f3:=TForm3.Create(self);
   try
      f3.ShowModal;
   finally
      f3.Free;
   end;
end;
Para acceder a algun objeto el Form2 desde el Form3 incluí:
Código:
implementation 

uses Unit2;
Ahora al intentar asignarle un texto a un edit del Form2 desde el Form3, 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 del form 3 si que puedo asignarle valores a los edit del Form1 sin problemas.

Intente crear la variable de tipo Form2 en el interface del Form1 para luego incluir el Unit1 en el Form3 y poder acceder de la forma:
Código:
f2.edit1.text :='algo'
pero tambien da problemas.

Prueba de esta manera.

Código Delphi [-]
uses Unit2;  // Incluyo la referencia en el Uses
...
procedure TForm1.Button1Click(Sender: TObject);
//var f2 : Tform2; //Esta variable solo será visible durante la ejecución de este procedimiento
begin
  Form2 := TForm2.Create(self);
  try
     Form2.ShowModal;
  finally
     Form2.Free;
  end;
end;

Prueba acceder al form2 desde Form3 usando.

Código Delphi [-]
Form2.edit1.text :='algo'

haz lo mismo para Form3 y los demas formularios que quieras crear.
Responder Con Cita
  #4  
Antiguo 27-11-2011
alexisenp alexisenp is offline
Registrado
NULL
 
Registrado: nov 2011
Posts: 3
Poder: 0
alexisenp Va por buen camino
Cita:
Empezado por Lord Delfos Ver Mensaje
Y pregunto, de donde tratas de acceder a objetos de Form2 desde Form3? Es decir, al hacer click en algun boton de Form3, en el OnCreate?

Por ahi viene por ese lado la cosa...


PD: Mis disculpas por la ortografia pero estoy en un teclado en ingles...
El Form1 es el principal hay varias opciones, el usuario presiona el boton de Nueva boleta y se abre el Form2 que pide el ingreso de varios datos. Uno de ellos son los datos del cliente, el usuario tiene un boton que al presionarlo se abre el Form3 y se le muestra una lista con clientes en un DBGrid en ese form tiene varias opciones de busqueda y filtro, al presionar el boton "Seleccionar" del Form3 los datos del cliente que el usuario eligio, se muestran en el Form2 ( en unos Edits). Al presioinar el boton "Seleccionar" se ejecuta un codigo como el siguiente
Código:
Form2.edit_nombre:=DBgrid_clientes.Fields[1].Value;
form2.edit_direccion:=DBgrid_clientes.Fields[2].Value;
Form2.edit_fono:=DBgrid_clientes.Fields[3].Value;
en ese momento es cuando me da el error

Cita:
Empezado por beginner01 Ver Mensaje
Prueba de esta manera.

Código Delphi [-]
uses Unit2;  // Incluyo la referencia en el Uses
...
procedure TForm1.Button1Click(Sender: TObject);
//var f2 : Tform2; //Esta variable solo será visible durante la ejecución de este procedimiento
begin
  Form2 := TForm2.Create(self);
  try
     Form2.ShowModal;
  finally
     Form2.Free;
  end;
end;

Prueba acceder al form2 desde Form3 usando.

Código Delphi [-]
Form2.edit1.text :='algo'

haz lo mismo para Form3 y los demas formularios que quieras crear.
Pero esa variable que pusiste Form2, ¿donde la declaro?, es la unica duda que me queda de tu respuesta, pero todo lo demas lo he hecho.

Saludos y gracias por sus respuestas.
Responder Con Cita
  #5  
Antiguo 28-11-2011
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
Bueno... No vi la respueta de arriba, je. Lo mas sensato seria no declarar la variable en ningun lado. La variable ya existe, se llama Form2 y esta declarada en la Unit2.
Responder Con Cita
  #6  
Antiguo 28-11-2011
alexisenp alexisenp is offline
Registrado
NULL
 
Registrado: nov 2011
Posts: 3
Poder: 0
alexisenp Va por buen camino
Cita:
Empezado por Lord Delfos Ver Mensaje
Bueno... No vi la respueta de arriba, je. Lo mas sensato seria no declarar la variable en ningun lado. La variable ya existe, se llama Form2 y esta declarada en la Unit2.
Efectivamente, esa es la solucion a mi problema.
Probe lo que ponia @beginner01 y no me funciono por que estaba usando la variable Form2 cuando en realidad en mi programa la variable es Form_ingreso_comprobante, no me di cuenta hasta que vi tu respuesta Lord Delfos.

Muchisimas gracias a ambos, con esto mi problema queda resuelto .
Responder Con Cita
  #7  
Antiguo 02-12-2011
Avatar de JoseAntonio
JoseAntonio JoseAntonio is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lima - Ciudad de los Reyes.
Posts: 87
Poder: 18
JoseAntonio Va por buen camino
bueno, no se muy bien para que necesitas acceder a componentes de otro formulario el hecho que se pueda no significa que se deba, una clase solo deberia conocer la interfaz de otra y en esta otra no deberian estar publicados sus componentes, recuerda que los objetos son cajas negras y no pueden estar interactuando entre si por todos lados, a mayor cantidad de enlaces mas dificil te sera depurar ademas otro que ve tu codigo tendra que abrir varios formularios para entenderlo, es mi opinion, salu2
__________________
nuestro carácter está reflejado en cada línea de código que escribimos.
Responder Con Cita
  #8  
Antiguo 12-12-2011
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 21
PepeLolo Va por buen camino
Porque no colocas el dataset y DataSource que manejas en un DataModulo que será visible por todos los formularios y los campos del form2 los enlazas al datasource del DataModulo, así tendrás la misma información en un formulario y en otro, sin necesidad de acceder a las propiedades de distintos formularios.
__________________
PepeLolo
El hombre el único virus que mide más de unas cuantas micras
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
Acceder a propiedades componentes de un form José Luis Garcí OOP 15 20-03-2010 12:33:38
Obtener el nombre del Form que llamó a otro Form. cybergerman OOP 9 01-01-2009 12:53:29
llamar al evento click de un boton q se encuentra en un form desde otro form TURBOIGOR OOP 6 02-12-2008 15:50:16
como puedo asociar un form a otro form? jasz OOP 1 28-11-2007 01:12:09
Imposible hacer visible un form desde otro form SMTZ .NET 13 16-01-2006 22:41:08


La franja horaria es GMT +2. Ahora son las 20:48:07.


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