我在主窗体下动态创建了一个窗体,在这个动态创建的窗体中,我又动态创建了一个窗体,在第二个动态创建的窗体下,我想用第一个动态创建的窗体内的东西(比如对一个Edit的text进行赋值),我试了不能成功·怎么回事?要实现这个功能该怎么办?
我的代码是:
  Form2.Edit1.Text:='123';
uses 我用了,
代码很简单
第一个在主窗体下的button的click事件
procedure TForm1.Button1Click(Sender: TObject);
var form2:tform2;
begin
  form2:=tform2.Create(application);
  form2.Parent:=form1;
  form2.Show;
end;第二个在上一个窗体下的button的click事件
procedure TForm2.Button1Click(Sender: TObject);
var form3:tform3;
begin
  form3:=tform3.Create(self);
  form3.Parent:=form2;
  form3.Show;
end;在第三个窗体下
procedure TForm3.Button1Click(Sender: TObject);
begin
 form2.Edit1.Text:='456';
end;

解决方案 »

  1.   

    如果你要在form3中引用form2中的对象,那么一定要在form3的uses子句中引用unit2
    但是如果这样的话就会引起循环引用,form2引用form3,form3又引用form2,这是delphi所不允许的
    解决方法:
    你这种情况可以定义一个公用的unit文件,里面定义一些变量用于存放你需要在页面间传递的数据
    你可以在form2里把数据存进去,然后在form3里读出来
      

  2.   

    你的那种方法我以前用过,是可以!但我这个系统,如果第一公共的单元,那就很麻烦!
    不知有没有别的办法?
    在delphi 中form2中引用了unit3后,在form3中不是可以在用uses unit2的吗?
    是在这种情况下不能传递数据吗?
      

  3.   

    form3:=tform3.Create(self);改为  form3:=tform3.Create(Application);
      

  4.   

    比较懒的方法是将 var form2:tform2; 定义成unit1中的全局变量,
    在unit3中uses unit1;
      

  5.   

    sendMessage(form2.Edit1.handle,WM_TEXT,0,pchar('456'));
      

  6.   

    form3中的form2对象是和创建form3的form2指向同一内存地址吗?
      

  7.   

    试试((TFrom3)Form2.parent).edit1.text='456';
      

  8.   

    不是同一个内存地址肯定不行,在from3写一个public 函数把form2传进去。
    (private)
    var m_from2:TForm2;
    (public)
    procedure SetInForm2(Ffrom:Torm2)
    {
        m_from2 =Ffrom;
    }
    ////
    if(m_from2<>nil) m_from2.).edit1.text='456';
    m_from2.update();
      

  9.   

    你是动态创建的窗口和其中的对象 也就是没有直接的创建窗口2对不对?然后把窗口2的父指向了窗口1 。但是Form2本身是没有代码的吧?
      

  10.   

    ((TFrom2)Form3.parent).edit1.text='456';