PDA

Ver la Versión Completa : Asignar valor a una prppiedad formulario hijo????


mguixot
13-09-2004, 09:09:42
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.
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.


...
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?

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
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
¿Has creado el Form1?

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
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


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
...
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.