zoukankan      html  css  js  c++  java
  • ComponentCount和ControlCount区别

    很多时候会将一个Panel1放在Form1上,然后再将一个Button1放在Panel1上,这样的话,这个Button1的Owner就是Form1而Parent则是Panel1。

            所有的Delphi的Component都有Owner 属性,Owner属性表示这个Component的所有者是谁,比如上面的例子,Button1的所有者(Owner )就是Form1,当Form1析构时,会先将Button1释放掉。也就是说,Owner会自动地控制Component的生命周期,它负责构件的创建和释放。如在上例中,系统默认Form上所有Component的所有者是Form1。顺便指出,Create方法应带有表示Component的Owner的参数.,如果Owner设置的为Nil值,那这个Component必须创建者编码析构它,Owner属性是只读的,并且在运行期是无法修改它的值。

             类似,但不同于Owner属性,Parent 属性则表示Component从属于另一个Component,简单的说自身是其他Component的Child Component,例如 TForm,TGroupBox ,TPanel等。Parent是用来控制 在它的客户区范围内的Child Component,Parent决定如何展示包含的Child Component,例如:Left,Top等属性都是相对于Parent的位置。

             Parent属性可以在运行期被修改。并非所有的Component都有Parent,Parent属性可以为Nil值,可以用HasParent 方法返回的Boolean值来判断Component是否拥有Parent。 我们可以设置Parent属性来做一些控制,例如:我们可以在Form1上置Panel1和Panel2,然后再放一个Button1在Panel1上,在Button1的OnClick事件中写上:Button1.Parent := Panel2;  运行这段代码你会发现,开始Button1是在Panel1上,然后按下Button1触发OnClick事件后,Button1‘跳’到了Panel2上。我们要在运行期间创建一个Button的话,就一定要注意指定它的Parent属性,否则Button不会显示出来,因为它必须拥有一个Parent的容器来显示自己。如果你在设计这个Button时察看下属性编辑器,你会看到ParentFont和ParentShowHint等属性,类似于这样的属性设置为True的话,就会使Button的Font以及ShowHint属性按Parent的Font和ShowHint的值来设置,保持一致的风格。比如Parent的Font是红色,那么Button的字体也将是红色。

            ControlCount和ComponentCount的区别也就取决于Parent与Owner的区别,还是拿上面的例子解释下Panel1的ControlCount为1而ComponentCount却为0,是因为Button1的Parent属性指向的是Panel1而Owner属性则还是Form1,所以Form1的ComponentCount值是2,包括Panel1和Button1。我们可以利用Controls属性与Components属性去遍历Parent所包含的Child Component和Owner所管理的Child Component。

            这是一个初学者比较容易混淆的概念,希望此文能帮助刚刚接触Delphi和BCB的朋友了解些基本的知识。

    热爱工作,热爱生活,热爱文学
    好的代码像粥一样,都是用时间熬出来的
  • 相关阅读:
    Mongo连接远程数据库
    将MongoDB服务器设置成Windows启动服务(win10)
    关于php初学者的理解!请大家浏览并指出不足!谢谢!
    python+selenium初学者常见问题处理
    极客时间测试专栏阅读总结——软件测试总体方案
    pytest 一.安装和使用入门
    软件测试工程师——你不仅仅应该会点点点
    测试电梯、杯子、桌子、洗衣机的方法
    软件测试面试-软件测试宝典
    支付测试场景
  • 原文地址:https://www.cnblogs.com/jijm123/p/14029906.html
Copyright © 2011-2022 走看看