已知PANEL1....30,如何以最快或最简洁的方式让指定序号的PANEL变为不可见?--->会家不难.(20分)

  • 主题发起人 主题发起人 xygz
  • 开始时间 开始时间
用component is tpanel方法。具体的自已做吧。
 
哈,我刚做过这样的程序,定义一个数组:
a:array [1..30] of tpanel;
然后,把你的30个PANEL分别赋给a[1]、a[2]、......
在相应的地方调用a.hide即可。
 
将Panel1...30的Tag属性设为1...30
for i:=1 to 30 do
begin
if (Sender as TPanel).tag=n then//n为指定值
(Sender as TPanel).visible:=False;
end;
 
只输入一个序号,比如指定15,要把Panel15的VISIBLE变为FALSE.
不想用component is TPanle去逐个判断.
 
用其tag属性,写个函数吧。
 
我的想法是:
Panelstring:='Panel'+inttoStr(Panel_no);
with PanelString as TPanel do
visible:=False;

为什么不行?
 
var s:tobject;
begin
s:=FindComponent('panel15'):
(s as tpanel).visible:=false;
end;
 
如此即可:
for i:=0 to componentcount-1 do
if components is TPanle then
components.visible:=false;
或者用将panel's tag赋值<>0
for i:=0 to componentcount-1 do
begin
if components.tag=<>0
components.visible:=False;
end;
 
Happy3X的方法仅限于只有PANEL控件的情况,如在PANEL1、PANEL3之类的后面又放置
EDIT、LABEL等控件,就会出错,而且逐个设置TAG甚为麻烦,简单方法如下:
var i,j:integer;
begin
j:=0;
for i:=0 to ComponentCount-1 do
if Components is TPanel then
begin
j:=j+1;
if j=n then //n为指定值
(Components as TPanel).visible:=False;
end;
end;
 
我要的就是类似于天真的方法,但FINDCOMPONENT在系统内应该还是逐个比较的,算了,就这样吧,
其他人每人1分以示谢意
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部