Q&A

  • Runtime에 생성된 오브젝트의 Name 속성은 어떻게 되는 거죠?
디자인 타임에 Object를 생성하면 ,

Edit1, Edit2...이런 식으로 Name 속성이 설정됩니다.

그걸 Runtime에 Edit1.Text이렇게 쓸 수있고요..

물론 디자인 타임에 같은 이름은 정의 할 수 없잖아요..



그런데, Runtime에 생성했을 때에는 Name 속성은 어떻게 되죠?

예를 들어,

var

Edit : TEdit;

begin

for i := 0 to 10 do

begin

Edit := TEdit.Create(nil);

end;



이렇게 하면, 같은 Edit 이 11개 생성되는게 아닌가요?

왜 에러가 나지 않을까요..?

디자인타임에서는 Edit은 같은 이름으로는 하나밖에 생성을 못하는데 Runtime에서는

저렇게 생성해도 에러가 안나는건 왜 그런지요...



그리고 디자인 타임에 생성된 객체는 Edit1.Text, Edit2.Text 이렇게, Runtime에 사용하는데, 위와 같이 Runtime에 생성된 객체들의 각각을 어떻게 가져다 쓸수 있을까요..



생성될때마다 , Name 속성을 지정해줘야 하나요?

for i := 0 to 10 do

begin

Edit := TEdit.Create(nil);

Edit.Name := 'Edit' + IntToStr(i);

end;



헷갈리는군요...-_-;



3  COMMENTS
  • Profile
    버섯 2001.12.14 02:02
    훈 wrote:

    > 디자인 타임에 Object를 생성하면 ,

    > Edit1, Edit2...이런 식으로 Name 속성이 설정됩니다.

    > 그걸 Runtime에 Edit1.Text이렇게 쓸 수있고요..

    > 물론 디자인 타임에 같은 이름은 정의 할 수 없잖아요..

    >

    > 그런데, Runtime에 생성했을 때에는 Name 속성은 어떻게 되죠?

    > 예를 들어,

    > var

    > Edit : TEdit;

    > begin

    > for i := 0 to 10 do

    > begin

    > Edit := TEdit.Create(nil);

    > end;

    >

    > 이렇게 하면, 같은 Edit 이 11개 생성되는게 아닌가요?

    > 왜 에러가 나지 않을까요..?

    > 디자인타임에서는 Edit은 같은 이름으로는 하나밖에 생성을 못하는데 Runtime에서는

    > 저렇게 생성해도 에러가 안나는건 왜 그런지요...

    >

    > 그리고 디자인 타임에 생성된 객체는 Edit1.Text, Edit2.Text 이렇게, Runtime에 사용하는데, 위와 같이 Runtime에 생성된 객체들의 각각을 어떻게 가져다 쓸수 있을까요..

    >

    > 생성될때마다 , Name 속성을 지정해줘야 하나요?

    > for i := 0 to 10 do

    > begin

    > Edit := TEdit.Create(nil);

    > Edit.Name := 'Edit' + IntToStr(i);

    > end;

    >

    > 헷갈리는군요...-_-;

    >





    런타임때 컨트롤을 생성하면 여러 잇점이 있습니다.



    var RunTimeEdit : Array[1..10] of TEdit;



    ..

    ..



    for ii := 1 to 10 do

    begin

    RunTimeEdit[ii] := TEdit.create(nil);

    RunTimeEdit[ii].parent := Panel1;

    RunTimeEdit[ii].Text := '';

    RunTimeEdit[ii].left := ((ii -1) Mod 5) * 80);

    RunTimeEdit[ii].Top := ((ii -1) div 5) * 30);

    end;



    이렇게 사용하시면...

    배열로 만들어져.. 정말 사용하기 편해집니다.

    크리어시킬때나..

    아니면.. 여러가지로..







    즐코^^;

  • Profile
    2001.12.15 02:28






    버섯 wrote:

    > 훈 wrote:

    > > 디자인 타임에 Object를 생성하면 ,

    > > Edit1, Edit2...이런 식으로 Name 속성이 설정됩니다.

    > > 그걸 Runtime에 Edit1.Text이렇게 쓸 수있고요..

    > > 물론 디자인 타임에 같은 이름은 정의 할 수 없잖아요..

    > >

    > > 그런데, Runtime에 생성했을 때에는 Name 속성은 어떻게 되죠?

    > > 예를 들어,

    > > var

    > > Edit : TEdit;

    > > begin

    > > for i := 0 to 10 do

    > > begin

    > > Edit := TEdit.Create(nil);

    > > end;

    > >

    > > 이렇게 하면, 같은 Edit 이 11개 생성되는게 아닌가요?

    > > 왜 에러가 나지 않을까요..?

    > > 디자인타임에서는 Edit은 같은 이름으로는 하나밖에 생성을 못하는데 Runtime에서는

    > > 저렇게 생성해도 에러가 안나는건 왜 그런지요...

    > >

    > > 그리고 디자인 타임에 생성된 객체는 Edit1.Text, Edit2.Text 이렇게, Runtime에 사용하는데, 위와 같이 Runtime에 생성된 객체들의 각각을 어떻게 가져다 쓸수 있을까요..

    > >

    > > 생성될때마다 , Name 속성을 지정해줘야 하나요?

    > > for i := 0 to 10 do

    > > begin

    > > Edit := TEdit.Create(nil);

    > > Edit.Name := 'Edit' + IntToStr(i);

    > > end;

    > >

    > > 헷갈리는군요...-_-;

    > >

    >

    >

    > 런타임때 컨트롤을 생성하면 여러 잇점이 있습니다.

    >

    > var RunTimeEdit : Array[1..10] of TEdit;

    >

    > ..

    > ..

    >

    > for ii := 1 to 10 do

    > begin

    > RunTimeEdit[ii] := TEdit.create(nil);

    > RunTimeEdit[ii].parent := Panel1;

    > RunTimeEdit[ii].Text := '';

    > RunTimeEdit[ii].left := ((ii -1) Mod 5) * 80);

    > RunTimeEdit[ii].Top := ((ii -1) div 5) * 30);

    > end;

    >

    > 이렇게 사용하시면...

    > 배열로 만들어져.. 정말 사용하기 편해집니다.

    > 크리어시킬때나..

    > 아니면.. 여러가지로..

    >

    >

    >

    > 즐코^^;

  • Profile
    이경문 2001.12.14 01:57
    예전에 저도 고민했던 것인데요...



    디자인타임에 컴포넌트를 생성하면 T짜 빼고 <컴포이름> + <일련번호> 를 붙이게 되지요.

    (Classes.pas화일안의 procedure TComponent.ValidateRename 을 보면 알 수 있음)

    이것은 런타임에도 그대로 적용이 됩니다.

    즉, 생성된 Name을 관리하고 있는 클래스는 TComponent랍니다(그래서 Component를 만들 때 TComponent를 상속받아야 되지요),





    훈 wrote:

    > 디자인 타임에 Object를 생성하면 ,

    > Edit1, Edit2...이런 식으로 Name 속성이 설정됩니다.

    > 그걸 Runtime에 Edit1.Text이렇게 쓸 수있고요..

    > 물론 디자인 타임에 같은 이름은 정의 할 수 없잖아요..

    >

    > 그런데, Runtime에 생성했을 때에는 Name 속성은 어떻게 되죠?

    > 예를 들어,

    > var

    > Edit : TEdit;

    > begin

    > for i := 0 to 10 do

    > begin

    > Edit := TEdit.Create(nil);

    > end;

    >

    > 이렇게 하면, 같은 Edit 이 11개 생성되는게 아닌가요?

    > 왜 에러가 나지 않을까요..?

    > 디자인타임에서는 Edit은 같은 이름으로는 하나밖에 생성을 못하는데 Runtime에서는

    > 저렇게 생성해도 에러가 안나는건 왜 그런지요...

    >

    > 그리고 디자인 타임에 생성된 객체는 Edit1.Text, Edit2.Text 이렇게, Runtime에 사용하는데, 위와 같이 Runtime에 생성된 객체들의 각각을 어떻게 가져다 쓸수 있을까요..

    >

    > 생성될때마다 , Name 속성을 지정해줘야 하나요?

    > for i := 0 to 10 do

    > begin

    > Edit := TEdit.Create(nil);

    > Edit.Name := 'Edit' + IntToStr(i);

    > end;

    >

    > 헷갈리는군요...-_-;

    >