我有一个form2,里面已经有很多控件RichEdit,button之类的控件.
而我现在定义了一个
newform: array[0..99] of TForm;
在另外一个窗体Mainform中,我单击mainform中的button,动态创建一个newform[i]
 ...
 newform[i]:=TForm2.Create(form2.Owner);
 ...
 newform[i].show;  我运行的时候可以得到一个和Form2一样的窗体,现在问题是我想在Mainform中直接用newform操纵richedit,button之类的控件,我是这样写的newform[i].richedit1,可是不行,我不能操众richedit.这是为什么,richedit1是FORM2中的控件呀,而newform是TForm2.Create的呀,那我要怎么做才能用newform[i]操纵richedit1呢?

解决方案 »

  1.   

    newform: array[0..99] of TForm2;是TForm2,不是TFormTForm2上面才有richedit等其他控件,你定义的是TForm当然没有啦。
      

  2.   

    newform: array[0..99] of TForm2;
      

  3.   

    猜你的意思,richedit,button 是在 TForm2 上的?修改一下newform的定义:
    newform: array[0..99] of TForm2; 即可。楼主无事时,可以思考一下 TForm2, TForm, newForm之间到底是个什么关系。
      

  4.   

    第二个办法是:
    newform: array[0..99] of TForm; // 定义不变使用时可以这样:if (newForm[i] is TForm2) then
    begin
      (TForm2(newForm[i])).xxxxx
    end;这里要说明一下:
    上面的类型转换并非“强制”的,而是“软”的,可能返回 nil,所以先检查了一下newForm[i] 是不是TForm2类的实例(在你的程序里,当然是,可以不检查)。可以说,这里的转换与C++里的dynamic_cast是一样的。
      

  5.   

    对头哦
    newform: array[0..99] of TForm2;
     newform[i]:=TForm2.Create(Nil);
     newform[i].show;