有三个窗体,form1,form2,form3,form1是主窗体,form2,form3是子窗体。form1调用form2,form2调用form3,form3中自定义了一个属性prop1,定义形式如下property prop1 : string read fProp1 write fProp1在form2中对form3.prop1进行赋值,赋值语句如下。
if not assigned(form3) then
begin
  form3 := Tform3.create(self);
  form3.prop1 := 'test';
  form3.show;
end;
在form3显示的时候发现prop1并没有被赋值'test',不解。请问这是什么原因?如果form3是模态窗体,通过下面的语句对prop1赋值,则可以
form3 := TForm3.create(nil);
try
  form3.prop1 := 'test';
  form3.showmodal;
finally
  from3.release;
end;
请赐教,谢谢!

解决方案 »

  1.   

    是不是你用的变量名的问题,改成这样
    var 
      newform3: Tform3
    begin
      newform3:= Tform3.Create(self);
      NewFOrm3.prop1:= 'text'
      NewForm3.show;
    end;
      

  2.   

    你的Form3自动创建了吗!
    如果是自动创建的话,是不会立即显示的。而你上面的代码也不会被执行。
      

  3.   

    form1中放一个按钮,事件如下
      if not assigned(form2) then
      begin
        form2 := Tform2.create(self);
        form2.show;
      end;
    form2中放一个按钮,事件如下
      if not assigned(form3) then
      begin
        form3 := Tform3.create(self);
        form3.prop1 := 'test';
        form3.show;
      end;
    form3中放一个edit,用来显示prop1
    procedure TForm3.FormShow(Sender: TObject);
    begin
      edit1.Text := fprop1;
    end;
    form3中属性的定义
      private
        fProp1 : string;
        { Private declarations }
      public
        property prop1 : string read fProp1 write fProp1;
       { Public declarations }
      end;
      

  4.   

    晕,发现问题了。放在form3的onshow事件中是读不出prop1的值的。
      

  5.   

    哦,对了,MDI子窗体好象在Create后,就直接调用Show了。
    我原来也遇到这个问题,后来想问,但一直都望了!