关于赋值(9分)

  • 主题发起人 delphiboy
  • 开始时间
D

delphiboy

Unregistered / Unconfirmed
GUEST, unregistred user!
各位朋友,你们好!
我有50个LABEL,在程序中想把它们的ENABLE属性变
为FALSE,难道我一定要写50条赋值语句?有没有更简便
的写法?望指点。谢谢!
 
C

CJ

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to self.ComponentCount - 1 do
begin
if self.Components is Tedit then
begin
(Self.Components as Tedit).enabled := false;//perhaps true
end;
end;
end;
 
T

tqz

Unregistered / Unconfirmed
GUEST, unregistred user!
假设全部要改,那么:
for i:=0 to ComponentCount -1 do
begin
if Components is TLabel then
begin
...
end;
end;

 

小天

Unregistered / Unconfirmed
GUEST, unregistred user!
试试用数组吧
type Tmylabel=class(Tlabel);
var mylabel:array [1..50] of Tmylabel;
i:integer;
begin
for i:=1 to 50 do
mylabel.enabled:=false;
end;
 
W

wangkun

Unregistered / Unconfirmed
GUEST, unregistred user!
如果不是每个Label都要改,可以通过Tag属性加以分组
将需要分组的Label的Tag设置为一个相同的值
便一个如下的函数,将Tag的数值代入SelectGroup
将设置的状态值代入OnOff调用如下函数即可.

procedure TForm1.EnabledLabel(Onoff: Boolean;SelectGroup:Integer);
var
i: integer;
begin
for i:=0 to ComponentCount-1 do
if Components is TLabel
then if TLabel(Components).tag=SelectGroup
then TLabel(Components).enabled:=OnOff;
end;
 
C

CJ

Unregistered / Unconfirmed
GUEST, unregistred user!
我的最好,如果是在某个PANEL上的,可以把SELF改为PANEL
 
W

wgzhang

Unregistered / Unconfirmed
GUEST, unregistred user!
请教小天,
用数组的话,是不是得动态创建?是不是无法预先在Form上放置component
如果无法在设计时放好,那么,挺烦.
 

小天

Unregistered / Unconfirmed
GUEST, unregistred user!
嗯,是的,确实一定要动态生成。
不过这并不麻烦,对于一个LABEL来说,常需设置的有left,top,caption三个属性,而前两个基本上也是有一定规律的,程序修改如下:
type Tmylabel=class(Tlabel);
var mylabel:array [1..50] of Tmylabel;
i:integer;
begin
for i:=1 to 50 do
begin
mylabel.create(form1);
mylabel.parent:=form1;
mylabel.enabled:=false;
mylabel.left=...;
mylabel.top=...;
case i of
1:mylabel.caption:='...';
2:mylabel.caption:='...';
......
end;
end;
end;
 
D

DNChen

Unregistered / Unconfirmed
GUEST, unregistred user!
事实上wangkun的方法是比较好的 一种,用tag分类,用findcomponent去找出label。
 
L

lhxu

Unregistered / Unconfirmed
GUEST, unregistred user!
如果您老人家要修改50条label中的全部的话,CJ的方法
可行,但是如果修改部分的话,我看还是一条一条写吧,
至少不用担心会出什么错.我干打赌这样最省事,:)
 
C

CJ

Unregistered / Unconfirmed
GUEST, unregistred user!
LHXU:不是没条都改应该用TAG,而且,不光是LABEL,如果有MEMO什么的
可以都用TAG
if components.ascustomcontrol.tag = 50 then
components.ascustomcontrol.enabled := false;
 
X

xxy

Unregistered / Unconfirmed
GUEST, unregistred user!
如果你的LABEL的编号是连续的:
var
i:integer;
str:string;
lab:tlabel;
begin
for i:=1 to 50 do
begin
str:='label'+inttostr(i);
lab:=form1.findcomponent(str);
(lab as tlabel).enabled:=false;
end;
end;
 
D

delphiboy

Unregistered / Unconfirmed
GUEST, unregistred user!
对不起,前几天我无法上网,导致该问题无法结束,抱歉!
 
W

weiwu

Unregistered / Unconfirmed
GUEST, unregistred user!
xxy的解答是最方便的,问题是好像抄袭我在其它网站和报刊的问答集中的内容!
 
S

SeaSky

Unregistered / Unconfirmed
GUEST, unregistred user!
> lab:tlabel;
> (lab as tlabel).enabled:=false;
~~~~~~~~~~~~~~

有必要吗?
Lab.enabled :=false
 
D

delphiboy

Unregistered / Unconfirmed
GUEST, unregistred user!
接受答案了.
 

Similar threads

回复
0
查看
852
不得闲
S
回复
0
查看
948
SUNSTONE的Delphi笔记
S
S
回复
0
查看
769
SUNSTONE的Delphi笔记
S
S
回复
0
查看
743
SUNSTONE的Delphi笔记
S
顶部