不知何原因,我的定义是
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,最后出错?
该如何办

解决方案 »

  1.   

    temp:=Tcomponent(sender) as Tcheckbox;
    复杂了~~直接
    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;
      

  2.   

    这是因为abc里你又设置了checked属性,产生了onclick事件,循环调用,加个变量防止abc重入就行了:
    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;