Q&A

  • [제목]for문에서 해당조건 삭제시 번호감소 시키기?
for i:=0 to MainForm.FavoritesStringGrid.RowCount do

begin

if FavoritesTreeView_OldSelectIndex = MainForm.FavoritesStringGrid.cells[1,i+1] then

begin

FavoritesGridDeleteRow( i+1 , FavoritesStringGrid , MainForm.FavoritesTable );

MainForm.FavoritesTreeView.selected.delete;

//dec(i); <-------에러남;

end;

--------------------------------------------------------------------------------------

소스는 위와같습니다.

그런데 for 루프문에서 i가 1씩 증가하기때문에 예를들어서

스트링그리드 에서 지울 데이터가있는 열번호가 3,5,6,8 이라고하면

6번은 지워지지를 않습니다.

for 루프문에서 데이터를 지워도 i는 1씩증가하기 때문인데...



2  COMMENTS
  • Profile
    개허접 2001.08.06 09:35
    스트링 그리드는 아니구 listview를 야그해볼께요..

    물론 참고사항이니다.



    c := 0;

    while c < listview1.items.count do

    if listview1.items[c].checked then

    listview1.items[c].deleted

    else

    inc(c);



    참고가 될까 머르겠네요..

    즐프하세요~



    김정섭 wrote:

    > for i:=0 to MainForm.FavoritesStringGrid.RowCount do

    > begin

    > if FavoritesTreeView_OldSelectIndex = MainForm.FavoritesStringGrid.cells[1,i+1] then

    > begin

    > FavoritesGridDeleteRow( i+1 , FavoritesStringGrid , MainForm.FavoritesTable );

    > MainForm.FavoritesTreeView.selected.delete;

    > //dec(i); <-------에러남;

    > end;

    > --------------------------------------------------------------------------------------

    > 소스는 위와같습니다.

    > 그런데 for 루프문에서 i가 1씩 증가하기때문에 예를들어서

    > 스트링그리드 에서 지울 데이터가있는 열번호가 3,5,6,8 이라고하면

    > 6번은 지워지지를 않습니다.

    > for 루프문에서 데이터를 지워도 i는 1씩증가하기 때문인데...

    >

    > 어
  • Profile
    강인규 2001.08.06 06:22
    먼말인진 잘 모르겠지만..ㅡ.ㅡ;;;



    해당 변수를 변경시키려 한다면 while을 쓰시는게 좋은 방법인거 같고



    index가 변경이 되는게 문제가 된다면



    for i:=MainForm.FavoritesStringGrid.RowCount downto 0 do

    begin



    end;



    이렇게 하시면 별 문제가 없겠네여...



    델마당 자유게시판인가 가보시면 for문에서 변수값 변경시키는 꽁수가 있었던거 같은데



    추천되는 방법은 아닙니다용. 델파이2부터인가 델파이자체에서 막아논 기능이니...



    그럼 즐프하세요..^-^



    김정섭 wrote:

    > for i:=0 to MainForm.FavoritesStringGrid.RowCount do

    > begin

    > if FavoritesTreeView_OldSelectIndex = MainForm.FavoritesStringGrid.cells[1,i+1] then

    > begin

    > FavoritesGridDeleteRow( i+1 , FavoritesStringGrid , MainForm.FavoritesTable );

    > MainForm.FavoritesTreeView.selected.delete;

    > //dec(i); <-------에러남;

    > end;

    > --------------------------------------------------------------------------------------

    > 소스는 위와같습니다.

    > 그런데 for 루프문에서 i가 1씩 증가하기때문에 예를들어서

    > 스트링그리드 에서 지울 데이터가있는 열번호가 3,5,6,8 이라고하면

    > 6번은 지워지지를 않습니다.

    > for 루프문에서 데이터를 지워도 i는 1씩증가하기 때문인데...

    >

    > 어