请帮我找一下错误!(50分)

  • 主题发起人 主题发起人 fee
  • 开始时间 开始时间
F

fee

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现根据列表框中的选项,来决定一些编辑框的可见与否,设计程序如下,
var
edit :array[1..100] of integer;
i:integer;
begin
for i:=0 to checklistbox1.ItemHeight do
begin
if checklistbox1.Checked =true then
edit[1].visable:=true;
i:=i+1;
end;
end;
请帮我设计一下
 
粗看了一下,有几处错误:
for i:=0 to checklistbox1.ItemHeight do
^^^^^^^^^^Items.count-1
begin
if checklistbox1.Checked =true then
edit[1].visable:=true;
^^i
//i:=i+1; 这句删掉
end;

最后,建议判断boolean类型时这样判断省事:
if checklistbox1.Checked then
 
呵呵, 用checklistbox1.items.addobject(editx.name,tobject(editx));
然后
for i:=0 to checklistbox1.Items.count-1 do
tedit(checklistbox1.items.objects).visible:=checklistbox1.checked;

就可以了.
 
这样做以后还要自己一个个free,麻烦的.
 
cakk, 不用一个一个free. cytown在objects中加的相当于一个引用. 和下面
代码一样道理:
var
p1, p2: TEdit;

p1 := TEdit.Create(form);
p2 := p1;
...

freeandnil(p1);

谁说p2需要free的?
 
哦,明白了.
 
错误太多了,我建议:
var edit^ :array[1..100] of TEdit;
i:integer;
begin
edit[1] := @Edit1;
edit[2] := @Edit2; //其他类似.....
for i:=0 to checklistbox1.Items.Count-1 do
begin
if checklistbox1.Checked then
edit^.visable:=true;
end;
end;
 
大侠们说的极是,呵呵,又长见识了。

如果不太多的话用CASE就搞定了呀,方便查错也可以改的方便

其实Aloney还可以直接用
edit^.visable:=checklistbox1.checked;可能这样效率更高一点
 
提问者的问题很简单,为什么非要做那么复杂。
只要处理好visible就可以了。
 
后退
顶部