|
1. Call By Reference 는 참조를 넘기는 거니까..
주소를 나타내는 &를 붙여주면 되겠죠
void __fastcall TForm1::FindLabel(TLabel*&lbl)
{
lbl=Label1;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TLabel *lbl=NULL;
FindLabel(lbl);
if(lbl)ShowMessage(lbl->Caption);
}
그리고
void __fastcall TForm1::FindCtrl2(TLabel*lbl)
이런식으로 넘기는 것은 객체의 주소를 넘기는것이 아니라 객체 자체를 넘겨주는것이므로
Call By Value가 되는거죠
TLabel* 도 int 형이나 char형 처럼
단지 (포인터형) 변수라고 생각하시면 됩니다.
2. 여러개를 넘겨 받으려면... TList 같은것을 넘기면 되겠죠..
void __fastcall TForm1::FindCtrl3(TList *lst)
{
lst->Add(Label1);
lst->Add(Label2);
lst->Add(Label3);
}
void __fastcall TForm1::Button3Click(TObject *Sender)
{
TList *lst=new TList;
FindCtrl3(lst);
for(int i=0;i<lst->Count;i++)
{
TLabel *lbl=(TLabel *)lst->Items[i];
ShowMessage(lbl->Caption);
}
delete lst;
}
//---------------------------------------------------------------------------
그럼..
쩡이 님이 쓰신 글 :
: 안녕하세요?
: 일전에 컨트롤 검색하는 방법을 질문올려서 잘 사용하고 있었는데요.
: 또 막히는 부분이 있어서 도움받고자 질문 올립니다..
:
: FindControl() 함수는 폼에 있는 Label을 Tag단위로 검색합니다.
: 여기까지는 잘 되는데요..
:
: FindControl()을 호출하는 부분에서
: Call by Address, Call by Reference 하는 것처럼 여러개의 컨트롤을 넘겨받고 싶은데요..
: 어떻게 하면 좋을까요??
:
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::FindControl(TLabel *pLabel1, TLabel *pLabel2)
: {
: for(int i=0; i<Form1->ComponentCount; i++) {
: TLabel *pFind= dynamic_cast<TLabel *>(Form1->Components[i]);
: if(pFind) {
: if(pFind->Tag==1) {
: pLabel1= pFind;
: Memo1->Lines->Add(pLabel1->Name);
: }
: if(pFind->Tag==2) {
: pLabel2= pFind;
: Memo1->Lines->Add(pLabel2->Name);
: }
: }
: }
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: TLabel *pLabel1= NULL, *pLabel2= NULL;
:
: FindControl(pLabel1, pLabel2); //<<== 이부분이요~~
:
: //검색한 컨트롤 사용하기
: if(pLabel1) {
: Memo1->Lines->Add(pLabel1->Caption);
: }
: if(pLabel2) {
: Memo1->Lines->Add(pLabel2->Caption);
: }
: }
|