-
一月 25
这里的死循环调用,只是我自己起的一个名字,那么,究竟什么是死循环调用呢?我们看个例子:
比如我们有一个checkbox控件在窗体上,我们在他的onClick中写下代码:
procedure TForm1.chk1Click(Sender: TObject); begin ShowMessage('触发CLICK'); end;
这样,当我们点击这个checkbox的时候,会弹出一个对话框。
但是有时候,比如我们想用代码去改变这个checkbox的选中状态,比如某些设置,窗体在create的时候,去检测是否设置,如果设置了就把checkbox显示为选中状态,我们使用checkbox1.checked:=true;来改变选中状态的时候,会发现,它居然触发了onClick事件,这样,有时候就会造成死循环响应()比如onclick里面有类似设置checked的代码。
这个的确很头疼,有时候这不是我们想要的,那么我们就要避免在设置checked的时候,触发onClick事件,有个简单的办法,我们可以通过焦点来判断到底是人为点击还是程序设置了checked:
if not checkBox1.Focused then Exit;
我们在onClick中,添加这样一句话,如果他没有获得焦点,也就是说不是人为点击,那么就退出,这样,就可以避免触发onClick了。
类似的控件还有不少,比如trackBar,设置position的时候会触发onChange事件等等

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
1楼 chunyangsuhao