Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Asignar valor a una prppiedad formulario hijo???? (https://www.clubdelphi.com/foros/showthread.php?t=14192)

mguixot 13-09-2004 09:09:42

Asignar valor a una prppiedad formulario hijo????
 
Hola a todos,
tengo un problema a la hora de pasar un TStrings entre un formulario padre y otro hijo. En el formulario hijo me he creado una Property y un método para acceder a ella.
Código:

  private
    { Private declarations }
    FScriptFinal:TStrings;
    procedure setScriptFinal(const Value:TStrings);
  public
    { Public declarations }
    property scriptFinal:TStrings write setScriptFinal;
  end;

.....

procedure TForm1.setScriptFinal(const Value:TStrings);
begin
  FScriptFinal.Assign(Value);
end;

Desde el formulario padre, intento de esta forma asignar el TString al hijo, pero me da un error de violacion de memoria.

Código:

...
var
  ListaArticulosNew:TStrings;
begin
  ListaArticulosNew := TStrings.Create;
 ...
 Form1.scriptFinal := ListaArticulosNew;
...


Podrían ayudarme?

Saludos y gracias

aig 13-09-2004 10:07:23

¿Has creado el Form1?

Código:

Form1.Create;

mguixot 13-09-2004 10:14:08

si, lo tengo incluido en el Auto-create Forms.

Saludos

Neftali [Germán.Estévez] 13-09-2004 10:20:17

... y en ese form ¿tienes en algun sitio la creación de FScriptFinal?

Lepe 13-09-2004 11:03:49

Código Delphi [-]
procedure TForm1.setScriptFinal(const Value:TStrings);
begin
//  FScriptFinal  es nil, estas sobrepasando un puntero nulo

if FscriptFinal = nil then 
  FscriptFinal := TstringList.create;

  FScriptFinal.Assign(Value);
end;

Saludos

roman 13-09-2004 15:10:40

Cita:

Empezado por aig
¿Has creado el Form1?

Código:

Form1.Create;

Espero que no lo esté creando así ya que de esta forma seguramente le causará un Acces Violation tarde que temprano.

// Saludos

aig 13-09-2004 17:40:12

Solo trataba de indicarle el primer fallo que se me había ocurrido. Supongo que te refieres a que antes de crear un form se debe comprobar que no fue creado anteriormente.

Este hilo no trata sobre como crear y mostrar formularios, por eso quizás fui demasiado escueto.

Si he creado confusión a alguién, pido disculpas. Aunque ya veo que mguixot entendió lo que quería decirle.

saludos.

roman 13-09-2004 18:47:52

Cita:

Empezado por aig
Solo trataba de indicarle el primer fallo que se me había ocurrido. Supongo que te refieres a que antes de crear un form se debe comprobar que no fue creado anteriormente.

Este hilo no trata sobre como crear y mostrar formularios, por eso quizás fui demasiado escueto.

No me refiero a eso. De ser así ciertamente no lo habría indicado. Si Form1 es una variable de tipo TForm1, la manera correcta de crear el formulario es

Código Delphi [-]
Form1 := TForm1.Create(...);

es decir, debe invocarse Create como método de la clase TForm1 y no como método del objeto Form1 que aun no existe. Dado que el hilo habla de violaciones de memoria, apunté lo anterior ya que crear el formulario como lo escribiste es un causal casi seguro de una excepción de este tipo.

// Saludos

Lepe 14-09-2004 12:09:14

Código:

...
var
  ListaArticulosNew:TStrings;
begin
  ListaArticulosNew := TStrings.Create;
 ...
 Form1.scriptFinal := ListaArticulosNew;
...

Volviendo al tema original, TStrings es una clase abstracta, ¿no deberia crear un TStringList si va a manejar los elementos?.

Saludos.


La franja horaria es GMT +2. Ahora son las 11:51: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