这听起来像我以前见过的事件 - 噩梦:-)
我通常设置一个我在事件中检查的标志,而不是删除事件.我经常使用整数而不是布尔值,以便在一次处理中可以多次设置相同的标志.
像这样的东西:
procedure TMyObject.Traverse; begin inc(FTraverseFlag); try ... finally dec(FTracerseFlag); end; end; procedure TMyObject.OnBefore( ... ); begin if FTraverseFlag > 0 then exit; ... end;
我想这可以很容易地解决Barrys问题.
这听起来像我以前见过的事件 - 噩梦:-)
我通常设置一个我在事件中检查的标志,而不是删除事件.我经常使用整数而不是布尔值,以便在一次处理中可以多次设置相同的标志.
像这样的东西:
procedure TMyObject.Traverse; begin inc(FTraverseFlag); try ... finally dec(FTracerseFlag); end; end; procedure TMyObject.OnBefore( ... ); begin if FTraverseFlag > 0 then exit; ... end;
我想这可以很容易地解决Barrys问题.