Q&A

  • kylix님 TObjectList에서의 Item삭제좀....
저는 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;



1  COMMENTS
  • Profile
    Alex 2001.05.04 20:26
    님이 작성하신 내용을 자세히 알 수는 없습니다만.



    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;