说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

用FOR循环给成批给控件属性赋值的进一步问题?

编辑:说三道四文库 发布时间:2018-01-22 08:48
HTML文档下载 WORD文档下载 PDF文档下载
上一次的问题如下:
我在一个窗体上定义了12个LABEL控件,分别为LABEL1----LABEL12,现在想用FOR循环给它们的一个相同的属性赋以相同的值,我的想法是这样的:
for i:=1 to 12 do
begin
label[i].visible:=false;
end;
但这样做显然不行,请问我如何才能在实例的名字中使用一个变量?

霹雳猫(DELPHI迷)的答案如下:
先给这些需要成批处理的Lable的Tag属性设置为一个统一的值,如3
例:
for i:=0 to ComponentCount-1 do
if components[i] is TLable then
   if   (Components[i] as TLable).Tag=3 then
      (Components[i] as TLable).Visible:=false;
我已经试过,的确可以达到把所有TLABEL控件成批赋值。

现在,有一个更进一步的需求:
我要根据一个变量N的指示,把从LABELN+1到LABEL12的VISIBLE属性改为FALSE,如何改动以上代码?
另外,我查了一下DELPHI的帮助,没有看懂COMPONENT这个东西的含义?麻烦哪位贤人再多费口舌,解释清楚一点。
你查tcomponent关键字
Components are persistent objects that have the following capabilities:

The ability to appear on Component palette and be manipulated in the form designer.
The ability to own and manage other components.
Enhanced streaming and filing capabilities.
The ability to be converted into an ActiveX control or other COM object by wizards on the ActiveX page of the New Objects dialog.

从上面知道,component的对父类tpersistent的一些功能上的扩展

vcl树,tobject-tpersistent-tcomponent(如果想要完全版的话给我发消息)

如果要改动从LABELN+1到LABEL12的VISIBLE属性改为FALSE
我觉的还是从tag属性入手,~~你该不会要动态的改变N吧
我正是要动态的改变N,N来自一个LISTBOX,随着选择的值不同,要隐藏LABELN+1以后的控件,现在又有新问题了,除了LABEL1---12以外,还有EDIT1---12,也要象LABEL一样的隐藏,该如何设置EDIT1---12的TEG属性?我套用了以上的程序想同时隐藏LABEL和EDIT,但为何LABEL能实现,而EDIT却不加选择的全部隐藏呢?
我用的程序如下:
procedure Tsettankform.ComboBox1Change(Sender: TObject);
var
n:integer;
i:integer;
begin
n:=strtoint(combobox1.Text);
for i:=1 to componentcount-1 do
if components[i] is tlabel then
  if (components[i] as tlabel).tag=3 then
    (components[i] as tlabel).Visible:=true;
for i:=n+3 to ComponentCount-1 do  //因为面版上还有另外两个LABEL控件,所以从n+3开始。
if components[i] is TLabel then
  if (Components[i] as TLabel).Tag=3 then
      (Components[i] as TLabel).Visible:=false;

for i:=0 to componentcount-1 do
if components[i] is tedit then
  if (components[i] as tedit).tag=2 then
    (components[i] as tedit).Visible:=true;
for i:=n to ComponentCount-1 do
if components[i] is tedit then
  if (Components[i] as Tedit).Tag=2 then
      (Components[i] as tedit).Visible:=false;
  end;
end.
这样好了,你不是有12个edit和label吗
给每个edit赋不同的tag值,从0到11,tag是整型的,你可以用判断语句>或者<来进行过滤
keke,觉的怎么样,应该可以解决你这个问题吧
for i:=n to ComponentCount-1 do
我还没有试过,它是按什么顺序遍历下去的??申明的顺序?
我明天回来试一下,继续讨论,`~~~keke,,睡觉
试过了,遍历的顺序是按某种顺序,我得出的是tlable-》tbutton-》tedit
其他的就没有试了,你的问题搞定了没有
谢谢小弟弟,我自己搞定了!这话怎么不太对劲??
告诉你一个更聪明的办法吧:
for i:=1 to 12 do
begin
  TLabel(FindComponent('Label' + inttostr(i))).Visible := False;
end;
想怎么遍历怎么遍历。
七牛技术总监陈超:记Spark Summit China 2015 Project Tungsten:让Spark将硬件性能压榨到极限 Android手表在中国这样落地 ART运行时Foreground GC和Background GC切换过程分析 开创未来的关键:是什么造就了硅谷?(上) datgrid中删除记录行后,如何在数据库中也删除 重装XP后,windows 2003如果恢复? 静儿有delphi与mapinfo方面的问题QQ:9813117请教 这段代码为什么在vc++6.0和TC++3.0下调试都通不过 关于 CHM 帮助文件的乱码的问题! 上海的朋友进来看看 程序员们:你们向她表白了几次才成功??? 一辈子也许就这么一次机会(名牌大学计算机免费视频课件全面收看和下载)涉及面广vb\vc\java\asp..... 如何通过word对象得到word的二进制流和如何从一个二进制流得到一个word.Document对象 板岩 页岩哪种中更易有化石?为什么? 生活中处处有语文的作文.初中的.急! 谁知道这种水龙头更换钢丝管的方法 水龙头坏了,想换一个,介绍个网购的水龙头店. 立夏 和 夏至都什么意思 请问水龙头怎么拧下来?我买了扳手,可是还是拧不下来 立夏的作文 如何区分板岩和页岩 页岩``砾石`砾岩``板岩``不是很清楚他的外观` 壮汉翻拍性感照做广告 翘臀又嘟嘴(高窃听默克尔,奥巴马早就知情?监听亚太,美曾想“借道”日本光缆美动物园老虎“抢南瓜”迎万圣节(高清周边外交需要邻国间更深入地相互理解拉萨今早出现日晕现象(图)自拆→复挂→再自拆→再复挂充电宝和阿玛尼广东队目标:保六争三拼一点燃物品跳楼月老的后现代生活召唤神座君临异世之暗黑刺客心剑问情无限光环坛南湾海滨浴场旅游平潭森林公园旅游龙凤头海滨度假区旅游东海仙境旅游双桂堂旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘