不知何原因,我的定义是
procedure abc(sender:Tobject);
var temp:Tcheckbox;
i,j:integer;
begin
temp:=Tcomponent(sender) as Tcheckbox;
i:=strtoint(copy(temp.Name,13,1));
for j:=1 to 2 do
drescheckbox[i,j].checked:=false;
j:=strtoint(copy(temp.Name,14,1));
drescheckbox[i,j].Checked:=true;
end;
调用为:
checkbox.onclick:=abc;
但发现击中的checkbox在不停的闪动,即不停的调用abc,最后出错?
该如何办
procedure abc(sender:Tobject);
var temp:Tcheckbox;
i,j:integer;
begin
temp:=Tcomponent(sender) as Tcheckbox;
i:=strtoint(copy(temp.Name,13,1));
for j:=1 to 2 do
drescheckbox[i,j].checked:=false;
j:=strtoint(copy(temp.Name,14,1));
drescheckbox[i,j].Checked:=true;
end;
调用为:
checkbox.onclick:=abc;
但发现击中的checkbox在不停的闪动,即不停的调用abc,最后出错?
该如何办
复杂了~~直接
temp:=Tcheckbox(sender);
定义一个局部静态变量,或者全局变量in_procedure,然后代码修改如下:
if in_procedure then exit;
in_procedure:=true;
temp:=Tcheckbox(sender);
i:=strtoint(copy(temp.Name,13,1));
for j:=1 to 2 do
drescheckbox[i,j].checked:=false;
j:=strtoint(copy(temp.Name,14,1));
drescheckbox[i,j].Checked:=true;
in_procedure:=false;
var isProcessing: boolean;procedure abc(sender:Tobject);
var temp:Tcheckbox;
i,j:integer;
begin
if isProcessing then Exit;
isProcessing := True; temp:=Tcomponent(sender) as Tcheckbox;
i:=strtoint(copy(temp.Name,13,1));
for j:=1 to 2 do
drescheckbox[i,j].checked:=false;
j:=strtoint(copy(temp.Name,14,1));
drescheckbox[i,j].Checked:=true; isProcessing := False;
end;