저는 TObjectList로 제가 만든 Class를 생성하여 집어 넣구 관리를 하고 있습니다.
근데.. 특정한 Object들만 Filltering 해서 해당 Object들만 삭제 할려구 하니 자꾸 에러가 납니다. 꼭좀 한수 가르쳐 주세요....
var
m_obj : TWisCls; //제가 만든 클래스 입니다..
m_wisobj : TConfigCls; //제가 만든 클래스 입니다...
for i := 0 to WaSeeMgr.cfgList.Count - 1 do begin
m_obj := TConfigCls(WaSeeMgr.cfgList.Items[i]);
if m_selcfg = m_obj.getcfgName() then begin
WaSeeMgr.objList.OwnsObjects := true;
for j := 0 to WaSeeMgr.objList.Count - 1 do begin
m_wisobj := TWisCls(WaSeeMgr.objList.Items[j]);
if m_selcfg = m_wisobj.ParentCfg then begin
m_wisobj.Free; <---- 여기 까지는 이상이 없습니다.
WaSeeMgr.objList.Delete(j); <--여기서 자꾸에러가 납니다.
end; //if
end; //for
//cfg obj delete
m_obj.Free;
WaSeeMgr.cfgList.Delete(i); //at list delete
break;
end; //if
end;
for 루프등을 사용해서 삭제를 할 경우에는
0부터 n까지가 아닌 n부터 0까지로 삭제하셔야 에러가 발생하지 않습니다.
따라서 님이 작성하신 코드에서 for 루프 두개를 다음과 같이 바꾸시기 바랍니다.
var
m_obj : TWisCls; //제가 만든 클래스 입니다..
m_wisobj : TConfigCls; //제가 만든 클래스 입니다...
for i := 0 to WaSeeMgr.cfgList.Count - 1 do begin
-> for i := WaSeeMgr.cfgList.Count - 1 downto 0 do begin
m_obj := TConfigCls(WaSeeMgr.cfgList.Items[i]);
if m_selcfg = m_obj.getcfgName() then begin
WaSeeMgr.objList.OwnsObjects := true;
for j := 0 to WaSeeMgr.objList.Count - 1 do begin
--> for j := WaSeeMgr.objList.Count - 1 downto 0 do begin
m_wisobj := TWisCls(WaSeeMgr.objList.Items[j]);
if m_selcfg = m_wisobj.ParentCfg then begin
m_wisobj.Free; <---- 여기 까지는 이상이 없습니다.
WaSeeMgr.objList.Delete(j); <--여기서 자꾸에러가 납니다.
end; //if
end; //for
//cfg obj delete
m_obj.Free;
WaSeeMgr.cfgList.Delete(i); //at list delete
break;
end; //if
end;