음...
Owner 와 Parent
님께서는 Owner와 Parent에 대한 개념을 알고계시면 쉽게 가능합니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tutorial&no=38
[Design-Time에 올린 Control]
먼저 Design-time에 폼위에 올려진 모든 Control or Component들은 모두
Owner가 Form이 됩니다.
즉 Form의 Components[] 배열에 다들어있죠
다음 링크에 있는 방식을 참조하여 원하는 기능을 만드실수 있습니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=818
동적생성
1) 동적생성할때 Owner가 Form인경우
TEdit *edt=new TEdit(this); // 이렇게 Control을 동적생성할때 생성자인자인 Owner를 form으로 줄경우
TEdit *edt=new TEdit(Form1); //
edit->Parent = Panel1;
동적생성하더라도 위와같이 Owner가 Form인경우는
위에 Design-time에 Form위에 올려진 Control을 찾을때와 똑같은 방식으로 찾으면 됩니다.
2) 동적생성할때 Owner가 Form인 아닌 경우
TEdit *edt=new TEdit(NULL); // 이렇게 Control을 동적생성할때 생성자인자인 Owner를 form이 아닌경우
TEdit *edt=new TEdit(Panel1); //
edit->Parent = Panel1;
이런 경우는 음... Control을 찾으면 Control의 Child-Control이 있는지 확인해 보구 roof를 돌려가면서 찾아야 합니다.
//아래와 같이 재귀루프를 돌면서 찾아야 정확합니다.
void __fastcall SetEditText(TWinControl *ParentCtrl , String str)
{
if(ParentCtrl==NULL)return;
if(ParentCtrl->InheritsFrom(__classid(TEdit)))
{
((TEdit *)ParentCtrl)->Text=str;
}
for(int i=0;iControlCount ;i++)
{
if(ParentCtrl->Controls[i]->InheritsFrom(__classid(TEdit)))
{
((TEdit *)ParentCtrl->Controls[i])->Text=str;
}
else if(ParentCtrl->Controls[i]->InheritsFrom(__classid(TWinControl)))
{
SetEditText((TWinControl *)ParentCtrl->Controls[i],str);
}
}
}
//---------------------------------------------------------------------------
//다음과 같이 사용하면 됩니다.
void __fastcall TForm1::Button11Click(TObject *Sender)
{
SetEditText(this,"잘되나?");
//이렇게 하면 현재 폼위에 올려진 모든 TEdit 의 Text를 바꿔줍니다.
}
//---------------------------------------------------------------------------
그럼..
두박자 님이 쓰신 글 :
: 흠... 매일 질문만 하네요 ^^;
:
: 폼위에 올려진 모든 컨트롤의(동적생성 포함) 정보를 가져오고 싶습니다.
:
: 가져온 컨트롤를 제어하려고 합니다.
:
: 예로
:
: 만약 폼에 에디트 박스가 3개가 있다면....
:
: 루프를 돌려서 각 콘트롤의 text 값을 변경하는겁니다.
:
: 가능한가요?..
|