|
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Panel1Click(TObject *Sender)
{
ShowMessage("눌렸음");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TLabel *LABEL = new TLabel(Form1);
LABEL->Parent = Panel1;
LABEL->Caption = "클릭";
LABEL->Left = 50;
LABEL->Top = 50;
// 이벤트를 상속
LABEL->OnClick = Panel1->OnClick;
}
//---------------------------------------------------------------------------
문제가 있다면, 만약에 Panel1의 이벤트에서 Sender를 참고하신다면 안된다는 점입니다. 일반적으로 Panel1을 클릭했을때는 Sender가 Panel1이 되지만, Label을 클릭하셨을때는 Label이 되기 때문입니다.
이런 경우에는, OnClick에서의 Sender의 처리를 변경하시거나, 따로 OnClick용 함수를 하나 만드신 다음, LABEL을 그쪽으로 참고하게 하고, 그 안에서 Panel1의 이벤트를 호출 하실 때, Sender를 dynamic_cast<TControl *>(Sender)->Parent 로 보내주시면 됩니다.
진수.네모 님이 쓰신 글 :
: 동적생성된 판넬위에 동적생성된 라벨을 올련 놓습니다.
:
: 만약 판넬에 이벤트를 주고 라벨을 클릭하면 이벤트가 실행이 안되자나요
: 혹시 이때 라벨을 클릭해도 판넬의 이벤트가 실행 되게 할 수 있나요.
:
:
:
: 유영인.Chris 님이 쓰신 글 :
: : 만약, 이벤트 함수 이름이 Panel1Click 이라면...
: :
: : Panel1Click(NULL); 이나 Panel1Click(객체 이름); 으로 클릭때 실행되는 이벤트를 실행할 수 있습니다.
: :
: : >> Panel1Click(Panel1);
: :
: : 이렇게 호출하신다면, Panel1Click의 Sender 객체에서는 Panel1 을 인자로 받습니다.
: :
: :
: : 다른 방법은 OnClick을 호출하는 방법입니다. 이 경우에는, OnClick 이라는 포인터가 NULL을 가르키고 있을수도 있으므로, 유무를 꼭 확인해야 합니다.
: :
: : >> if(Button1->OnClick)
: : >> Button1->OnClick(Button1);
: :
: : 이런 식으로 하시면, OnClick에 해당하는 함수가 호출됩니다.
: :
: :
: : 진수.네모 님이 쓰신 글 :
: : : 동적생성으로여 판넬 4개를 만들고 이벤트를 함수를 만들어 주었을 때요
: : :
: : : dynamic_cast<TGroupBox*>(Sender)->
: : :
: : : 클릭시 발생하는 이벤트는 잘 동작하는데. 이때 클릭하지 말고 그냥 함수로 3번째 판넬을
: : : 클릭한 것 처럼 할 수 있나요?
: : :
: : :
: : :
|