假设有三个窗体A,B,C,窗体B的name为form_b,窗体C的name为form_c,其中窗体B和窗体C都为动态创建。现在我要实现的就是在窗体C中改变窗体B中edit1.text的值,这看似不难吧??呵呵,我就是碰到难题了。
描述如下:
在窗体A中有如下代码:
 var  tempForm : TForm;
 begin
   Application.CreateForm(Tform_b,tempForm );//Tformclass_of_B为窗体B的类
   tempForm.Show;//这里就显示
 end;又假设在窗体B中有如下一edit1控件和button1按钮
其中button1用来显示窗体C,即form_c := Tform_c.create(nil);
                            form_c.show在窗体C有一按钮button1,其代码为:
   Form_b.edit1.text := 'abcdefg';//问题就在于这里出错了,提示访问越权之类的
   Form_b.show;窗体A,B,C都互相use了,所以这个就不用考虑在内。请问Form_b.edit1.text := 'abcdefg';这句错在哪?
又如何实现将窗体B 的edit1.text改变呢?

解决方案 »

  1.   

    上面的代码缺少封装的思想,不过还是可以修改的。

    var  tempForm : TForm;
    的变量tempForm改为全局变量,即改在UnitA的Interface部分定义,
    在窗体C
       Form_b.edit1.text := 'abcdefg';
    改为tempForm.Edit1.text := '';
      

  2.   

    由于tempForm是用来临时多个窗体,所以不能将它标记为全局变量。由于这是从一个系统里面碰到的问题,这里只是将它简单化了,而系统的窗体打开结构是不能改变的,也就是说系统多个窗体都是通过tempForm := alllicaption.creat()创建的。所以只能另想办法。其实这个问题的实质是:假设窗体A打开或创建了窗体B,站在窗体B的立场上看,如何得到窗体A的句柄或标记呢?即窗体B要知道是谁打开或创建了它?敬请高手继续关注。