【问题标题】:How does ParentBackground work on IDE generated Forms?ParentBackground 如何在 IDE 生成的表单上工作?
【发布时间】:2012-08-18 06:30:13
【问题描述】:

此代码适用于 VCL 表单应用程序中的 IDE 生成表单:

Self.ParentBackground := True;


但是为什么呢?没有一个前辈(TFormTCustomFormTScrollingWinControl)发布 TWinControl 的受保护的 ParentBackground 属性。单元顶部的表单(f.i. 'TForm1')的类型声明也没有。确实,正如预期的那样,这

TForm(Self).ParentBackground := True;

无法编译(“无法访问受保护的符号 TWinControl.ParentBackground”)。与在运行时创建的任何表单相同。


注意:我的问题不是关于如何设置属性(顺便说一句,还有其他的,比如 'Bevel[xxx]'),我'想知道这是如何工作的。

【问题讨论】:

    标签: delphi tform


    【解决方案1】:
    Self.ParentBackground := True;
    

    编译是因为一个类可以访问它自己的受保护成员。

    【讨论】:

      【解决方案2】:

      但是TForm1(Self).ParentBackground 有效。不同之处在于类TForm1Self所属)在同一个单元中声明;那么您确实可以访问受保护的成员。

      【讨论】:

      • 不,不是这样。代码在哪个单元中声明并不重要。至少不是 Self.XXX 编译的原因。
      • Unit1Unit2 中尝试initialization Form1.ParentBackground := true;。它只会在第一种情况下编译(当然它会崩溃,但仍然)。
      • 你是对的。不过,我想我会在这里留下我的答案,因为一个自然的后续问题是“在其他什么情况下你可以访问一个类的受保护成员”?
      • 我猜受保护并不意味着“类及其后代可以访问”。它的意思是“在声明类及其后代的单元中可访问”。
      • 感谢安德烈亚斯的回答,我认为大卫的回答更直接地解决了我的问题。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-03
      • 1970-01-01
      • 2017-10-09
      相关资源
      最近更新 更多