以下代码想循环查找Panel2中的Font字体属性,如为粗体,
则变为正常体
Var
  i                 : Integer;
  ChildControl      : TControl;     For i := 0 To Panel2.ControlCount - 1 Do
      Begin
        ChildControl := Panel2.Controls[I];
        if ChildControl.font.style=[fsbold] then //这行报错
          ChildControl.Font.Style := []; //这行也报错
      End;
我键入ChildControl后的小圆点想指定FONT属性,但发现大多数属性没有,只有Name、
Top、Width、Left等一般属性,why?为什么大多数属性不能访问?

解决方案 »

  1.   

    并非所有的控件都有Font属性的,如不可视控件就没有,只有一部分可视控件如:TLabel,TEdit等控件有,你上面的代码可是"一竹杆打死一片",当然是不行的,你只能是判断后再进行处理,如:
    if (ChildControl) is TEdit then
    ((ChildControl) as TEdit).Font.Name='宋体';
      

  2.   

    TControl???该类中Font是protected成员这样
      TMyControl=class(TControl)
      public
        property Font;
      end;var
      ChildControl:TMyControl;  ChildControl:=TMyControl(Panel1.Controls[I]);
      

  3.   

    ChildControl : TControl;
    你这样一来,把子控件向上转型成TControl。它的Font属性没公开,当然访问不了。按 ehom(?!) 的方法可以。
      

  4.   

    Oh,原来是这样,怪我基础没打好,没搞清楚类继承的关系,但我想问一下,什么书里面可以找到“TControl该类中Font是protected成员"和“子控件向上转型成TControl。它的Font属性没公开”这两个概念?
      

  5.   

    你只需查阅DELPHI关于VCL控件的帮助或查看DELPHI的源代码就可.
      

  6.   

    ChildControl.font.style=[fsbold] 
    写法本来就错误,字体类型为集合,应该用 IN 而不是 =