您好。 有两个窗体  form1---unit1
                   form2---unit2
已经有:
    unit1 中 在interface部分加入:unit2;
    unit2 中 在implementation 部分加入: uses unit1;
也就是说: 现在两个窗体可以互相调用了,或者说可以使用对方资源了。我想请教的是:    现在在 form1,或者说是在unit1 中,可以使用unit2 中的那些资源?
    假设:  
type
  TForm2 = class(TForm)
    Label1: TLabel;
    ADOConnection1: TADOConnection;
  private
    procedure  1;
    { Private declarations }
  public
    s:string;
    procedure  2;
    { Public declarations }
  end;
type
    pcp=record
    ....
    end;
var
  Form1: TForm1;
  ss: pcp;  1. “ unit1中可以使用 form2中的Label1,ADOConnection1 和public 中定义的s:string;procedure  2 ;其它不可以使用(包括非public定义 和 其它类,变量定义)“------这种说法对马?
  2.   var
  Form1: TForm1;
  ss: pcp;           ----------他们的作用范围是什么? 整个程序对马? 他们可以被unit1调用马?
   谢谢。

解决方案 »

  1.   

    1. unit1中可以使用 Tform2中published和public 中定义的,不能使用Tform2中private和protected中定义的
    还可以使用unit2中全局定义的部分
    2.  是的
      

  2.   

    你在窗体1中只能调用UNIT2中的PUBLIC中的变量S和过程2.其他的,你没有权利调用,PRIVATE是UNIT2的私有部分也就是说只有UNIT2自己内部能够使用,PROTECED的是保护部分,也不行。
    这就是面向对象的安全机制
      

  3.   

    看了小虫的话,才觉得这两天我写的程序全是问题程序,不过好在不大。下次一定注意质子:你可以在Form1里写Form2.  后面能出现的就是你能访问的。
      

  4.   

    先看在interface和implementation中的uses的区别:1. 如果在interface中,unit1引用了unit2,unit2引用了unit3,那么unit1可以调用unit3中的参数和函数(public,published);有些象C中的include。而在implementation中的uses没有这种包含的传递关系。这是两者的本质区别。2. 有的书上说,如果两个单元要互相调用,那么一个uses要写在interface中,另一个要写在implementation中,这是不正确的。实际上如果两个单元需要互相调用,直接在implementation中互相uses即可;这是也最科学的。但决不可以都写在interface中,这一点,通过 1 中的包含传递关系可分析出。3. 两个单元的互相调用,在程序的编写中是很正常的;在有的局部,可以使程序简单明了。
      

  5.   

    interface部分的都可以调用。只有private和过程内的局部变量不可调用。
    另外,循环调用虽然不好,但却是可以的。只有不都在interface中uses就行。但还是尽量避免。
      

  6.   

    同意 oracle_lover(数据库情人)的观点,但是我在使用两个窗体互相调用的时候,还是习惯主窗体调副窗体在 interface 中写,反之副窗体中在下面写,但这并不是从书上学的,自己总结出来的,如果uses Unit.... 写在上面的interface,可以使用子窗体中public,published中声明的外,还可以引用子窗体中的全部组件和不管是在什么地方声明的全程变量。
      

  7.   

    1、unit1中可以使用 form2中的public和published部分中的方法、属性和字段等,另外还可以使用unit2中interface部分定义的全局变量。
    2、可以使用。在interface的部分定义的全局变量和全局对象对整个工程都有效,不过要建议不要使用全局变量,因为不符合oo编程的思想,尽量使用属性和接口来实现对变量的访问!