浏览代码

* Fix for bug #21691

git-svn-id: trunk@20779 -
michael 13 年之前
父节点
当前提交
d3fa1b4979
共有 2 个文件被更改,包括 21 次插入5 次删除
  1. 1 0
      rtl/objpas/classes/classesh.inc
  2. 20 5
      rtl/objpas/classes/collect.inc

+ 1 - 0
rtl/objpas/classes/classesh.inc

@@ -487,6 +487,7 @@ type
     function GetPropName: string;
     procedure InsertItem(Item: TCollectionItem);
     procedure RemoveItem(Item: TCollectionItem);
+    procedure DoClear;
   protected
     { Design-time editor support }
     function GetAttrCount: Integer; dynamic;

+ 20 - 5
rtl/objpas/classes/collect.inc

@@ -304,7 +304,11 @@ end;
 
 destructor TCollection.Destroy;
 begin
-  If Assigned(FItems) Then Clear;
+  If Assigned(FItems) Then 
+    begin
+    BeginUpdate; // Prevent OnChange
+    DoClear;
+    end;
   FItems.Free;
   Inherited Destroy;
 end;
@@ -333,11 +337,22 @@ end;
 
 procedure TCollection.BeginUpdate;
 begin
-        inc(FUpdateCount);
+  inc(FUpdateCount);
 end;
 
 
 procedure TCollection.Clear;
+begin
+  BeginUpdate;
+  try
+    DoClear;
+  finally
+    EndUpdate;
+  end;    
+end;
+
+
+procedure TCollection.DoClear;
 begin
   If Assigned(FItems) then
     While FItems.Count>0 do TCollectionItem(FItems.Last).Free;
@@ -346,9 +361,9 @@ end;
 
 procedure TCollection.EndUpdate;
 begin
-        dec(FUpdateCount);
-        if FUpdateCount=0 then
-          Changed;
+  dec(FUpdateCount);
+  if FUpdateCount=0 then
+    Changed;
 end;