frmMain,form2,form3三个窗体,总体上是frmMain调用form2,form2调用form3,form3需要和form2通讯
frmMain中uses form2 //创建form2窗体
Application.CreateForm(Tform2,form2);
form2.ShowModal;
form2.free;form2中use form3//创建form3窗体
Application.CreateForm(Tform3,form3);
form3.ShowModal;
form3.free;form3中也同样use form2(在implementation中)
//需要和form2互相访问
form2.Edit1.text:=form3.Edit2.text;上述一切正常,但是要是frmMain创建form2时用以下代码动态创建,
var form2:Tform2;
begin
  form2:=Tform2.Create(self);//用Create(application)、Create(nil)都试过
  form2.ShowModal;
  form2.free;
end;则在form2.Edit1.text:=form3.Edit2.text;这行代码中报告内存错误,这是
form3不能访问form2了,虽然引用了form2的单元,这是为什么?

解决方案 »

  1.   

    var form2:Tform2;
    begin
      form2:=Tform2.Create(self);//用Create(application)、Create(nil)都试过
      form2.ShowModal;
      form2.free;  //注释这个试试
    end; 
      

  2.   

    绝对不是那个窗体没有创建的原因,大家可以试一下,是点form3窗体上一个按钮才执行“form2.Edit1.text:=form3.Edit2.text”的,怎么可能form3没有创建呢,而且form3是被form2创建的这个问题的原因是form2被创建的时候,如果用Application.CreateForm(Tform2,form2); 后来就不会发生内存问题,如果用form2:=Tform2.Create(self);那么后来就发生内存问题了例子很简单,大家最好试一下再回复,看是很简单,其实错误原因不是想象的那么简单的
      

  3.   

    你的代码和你的描述不一致啊
    form2.Edit1.text:=form3.Edit2.text;
    这个和 form3 所在的单元能不能访问 form2 所在的单元没关系啊
    先搞清楚自己想干嘛吧
      

  4.   

    是窗体句柄问题
    Application.handle 是应用的一个全局变量,如果用Tform2.Create(self)创建
    就不归Application.handle管,不在一个主窗体下,当然有问题
    将self换成Application.handle,试一试就知道了