Q&A

  • 동적으로 객체를 여러개 생성시킬때의 문제점
앞에서 29825 번에 소울해커님이 간단히
만드신 프로그램을 수정해봤는데요.
에러를 내면서 죽더군요....

소울해커님이 동적생성시  스크롤박스에서 불규칙하게 생성되던 문제를 해결해주셨는데요,
동적으로 에디트창 뿐만 아니라 체크박스, 리스트박스 등 등의 여러개의 객체를 같이 생성시켰더니
죽더군요....

동적으로 에디트창 뿐만 아니라 체크박스를
같이 생성시키고자 다음과 같이  수정했습니다.

//전역으로 선언  
Cnt: Integer = 0 ;
MyEdit: Array of TEdit;
MyCom : Array of TCheckBox ;

procedure TForm1.Button1Click(Sender: TObject);
begin
     Cnt := Cnt + 1;
    
     SetLength(MyEdit, Cnt + 1);

     MyCom[Cnt] :=TCheckBox.Create(ScrollBox1);
     MyEdit[Cnt] := TEdit.Create(ScrollBox1);
  
     if Cnt = 1 then begin
       MyCom[Cnt].SetBounds(0,0,17,17) ;
        MyEdit[Cnt].SetBounds(30, 0, 34, Height) ;
     end else begin
        MyCom[Cnt].SetBounds(0,MYCom[Cnt-1].Top+32,17,17) ;
        MyEdit[Cnt].SetBounds(30, MyEdit[Cnt - 1].Top + 32, 34, Height);
     end ;

     MyEdit[Cnt].Parent := ScrollBox1;
     MyEdit[Cnt].Visible := True;

    MyCom[Cnt].Parent := ScrollBox1;
     MyCom[Cnt].Visible := True;

    
end;

위와 같은 방식으로 하면 한개 생성할 때와 여러개 생성할 때의 차이점이 있나요?

2  COMMENTS
  • Profile
    윤상현 2004.02.12 19:56

    감사합니다... ^^

  • Profile
    소울해커 2004.02.12 19:48
    SetLength(MyEdit, Cnt + 1);

    동적 배열은 배열을 사용하기 전에 배열의 크기를 지정해 주어야 합니다.
    위의 SetLength 구문은 MyEdit 동적 배열의 크기를 Cnt + 1만큼으로 잡아주는 것이죠.
    에러가 나는 이유는 MyCom이라는 동적 배열의 크기를 잡아 주는 구문이 없어서 입니다.

    SetLength(MyCom, Cnt + 1);

    이란 구문을 삽입하고 나서 다시 시도해 보세요.