如何实现通过循环变量对控件名的宏替换,请高手指教!(200分)

  • 主题发起人 主题发起人 痞子张
  • 开始时间 开始时间

痞子张

Unregistered / Unconfirmed
GUEST, unregistred user!
问题是这样的
在一个Form上我有DBEdit控件100个,控件名称分别为DBEdit1,DBEdit2......DBEdit100
我现在要根据变量判断,设置这100个控件的ReadOnly属性均为True或均为False
现有办法是写100行代码:
DBEdit1.RealOnly:=True;
DBEdit2.RealOnly:=True;
DBEdit3.RealOnly:=True;
......
DBEdit100.RealOnly:=True;

能否实现类似这样的办法:
for i:=1 to 100 do DBEdit&inttostr(i):=True
.......

本人才疏学浅,望众位高手不吝赐教!再次感谢!
 
如果你的控件是放在Panel上的,可以使用下面的语句
for i := 0 to Panel1.ComponentCount - 1 do
if Panel1.Components is TDBEdit then TDBEdit(Panel1。Components).ReadOnly := True
放在其他控件上同理
 
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i := 0 to ComponentCount - 1 do
begin
if Components is TEdit then
if (Components.Name = 'Edit1') or ((Components.Name) = 'Edit2') then
TEdit(Components).ReadOnly := True
end;
end;
//以上可以根据控件的名称相应的设置其属性
 
for i := 1 to 100 do
TDBEdit(findcomponent('DBEdit'+inttostr(i))).readonly := true;
 
我认为应该这样做

把你的DBEdit(不管是设计时做的还是代码生成的)的Tag
属性加一个特征的前缀(例如:1000)

然后对 wcwcw 的程序作些改进如下:

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i := 0 to ComponentCount - 1 do
if Components is TDBEdit then
if (Components as TDBEdit).Tag >= 1000 then
(Components as TDBEdit).ReadOnly := True;
end;
不过,如果这些 DBEdit 是运行时生成的,你干脆用个控件数组得了,更省事了!
 
for i := 0 to ControlCount - 1 do
if Components is TDBEdit then
TDBEdit(Components).ReadOnly := True
 
请用Pearl方法,我经常这样使用,好用!!!!!
 
:IamWLJ888
请问Pearl方法如何使用啊?
:SupermanTm
 控件数组方式如何写代码?请教?

 谢谢各位帮忙,十分感动
 
type
TForm1 = class(TForm)
...
private
DBEdits: array [1..100] of TDBEdit;
...
procedure DBEditChange(Sender: TObject);
public
...
end;

....

procedure TForm1.FromCreate(Sender: TObject);
var
I: Integer;
begin
for I:= 1 to 100 do begin
DBEdits:= TDBEdit.Create(Self);
with DBEdits do begin
Parent:= Self; // 如果准备放在Panel上就写Panel的名字
Tag:= I;
OnChange:= DBEditChange; // 如果有其他要响应的事件就逐一写上
end;
end;
end;
 
不会吧?
我的方法都写出来了还不会用?
 
Pearl的方法不错,比较简便。我也正遇到这样的问题,先谢了!!1
 
to Pearl:
  不好意思,我把Pearl这个单词看做是方法啦,你的方法很好,问题已解决!

to:SupermanTm:
  谢谢你的指点。用Pearl的方法很好,已经搞定!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
771
import
I
后退
顶部