我应该如何访问子控件里的控件属性中的字体属性?
以下代码想循环查找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?为什么大多数属性不能访问?
问题点数:100、回复次数:9Top
1 楼pilicat(Delphi迷)回复于 2003-02-04 21:08:34 得分 20
并非所有的控件都有Font属性的,如不可视控件就没有,只有一部分可视控件如:TLabel,TEdit等控件有,你上面的代码可是"一竹杆打死一片",当然是不行的,你只能是判断后再进行处理,如:
if (ChildControl) is TEdit then
((ChildControl) as TEdit).Font.Name='宋体';Top
2 楼ehom(?!)回复于 2003-02-04 21:26:39 得分 35
TControl???
该类中Font是protected成员
这样
TMyControl=class(TControl)
public
property Font;
end;
var
ChildControl:TMyControl;
ChildControl:=TMyControl(Panel1.Controls[I]);
Top
3 楼iroi()回复于 2003-02-04 22:33:38 得分 20
ChildControl : TControl;
你这样一来,把子控件向上转型成TControl。它的Font属性没公开,当然访问不了。按 ehom(?!) 的方法可以。Top
4 楼aldz(阿蓝德猪(其实变猪不容易...))回复于 2003-02-06 09:46:48 得分 0
Oh,原来是这样,怪我基础没打好,没搞清楚类继承的关系,但我想问一下,什么书里面可以找到“TControl该类中Font是protected成员"和“子控件向上转型成TControl。它的Font属性没公开”这两个概念?
Top
5 楼pilicat(Delphi迷)回复于 2003-02-06 09:49:05 得分 0
你只需查阅DELPHI关于VCL控件的帮助或查看DELPHI的源代码就可.Top
6 楼hjb8000(北极熊)回复于 2003-02-06 10:57:05 得分 20
ChildControl.font.style=[fsbold]
写法本来就错误,字体类型为集合,应该用 IN 而不是 =Top
7 楼ehom(?!)回复于 2003-02-06 13:28:24 得分 0
没错,集合也可以赋值,也可以判断是否想相等,in是包含Top
8 楼idilent(怎么理解怎么说)回复于 2003-02-06 13:28:38 得分 5
都对。Top
9 楼ehom(?!)回复于 2003-02-06 13:28:43 得分 0
即子集的关系Top




