|
OnClick 이벤트 자체 내에서 이벤트가 발생한 객체를 지우는 것은 메모리 참조 에러를
일으킬 소지가 다분합니다. :(
OnClick 한번을 쓰기 위해서라면, 그냥 myFunc(NULL); 이런식으로 호출 한번만으로
가능합니다. 다만, 이벤트가 한번 발동을 한 뒤 지우고 싶다. 이런식이시라면,
별도의 처리 부분을 두어 삭제를 해야할것 같습니다.
그리고 객체 동적 생성시에는 이름을 정해 주셔야, 그 해당 함수 밖으로 나와도
객체를 찾을 수 있습니다.
아래 예제는 myButton을 생성하고 끝날때 자동으로 찾아서 해제하는 예제입니다.
: 지금도 많은 변수들을 전역변수로 쓰면서 생성했다가 지우고 있는데
: 이렇게 해야 되나요???
: --> 이런방법은 동적 생성 의미가 없는거 같은데;;;;;;
이 질문은 무슨 의미인지 잘 모르겠습니다. ^^
//---------------------------------------------------------------------------
#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::FormCreate(TObject *Sender)
{
TButton *myButton;
myButton = new TButton(this);
myButton->Parent = Form1;
// 차후 객체를 찾기 위하여 이름을 설정합니다
myButton->Name = "MyNewButton";
myButton->OnClick = Button1Click; // <-- 이곳에서 버튼을 지우고 싶습니다.
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->OnResize; // 어떤 특정한 것을 확대했대가 다시 돌아가려 합니다...
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
TButton *myButton = NULL;
if(Form1->FindComponent("MyNewButton"))
myButton = dynamic_cast<TButton *>(Form1->FindComponent("MyNewButton"));
if(myButton)
delete myButton;
}
//---------------------------------------------------------------------------
너브 님이 쓰신 글 :
: 안녕하세요... 항상 이곳에서 많은 도움을 받고 있습니다....
: 아래와 같이 버튼을 동적으로 생성 했는데.. 한번 사용한 후에 지우고 싶은데 어떡게 해야 되나요??
:
: TButton *myButton;
: myButton = new TButton(this);
: myButton->Parent = Form1;
: myButton->OnClick = myFunc; // <-- 이곳에서 버튼을 지우고 싶습니다.
: //---------------------------
:
: void __fastcall TForm1::myFunc(TObject *Sender){
:
: Fomr1->OnResize; // 어떤 특정한 것을 확대했대가 다시 돌아가려 합니다...
:
: // 이곳에서 동적생성한 부분을 지우고 싶습니다......?????
: }
: //-----------------------------------------------------------------
:
: 처음에는 위에 있는 부분에 delete 를 써 봤는데...
: OnClick 이벤트가 일어나기 전에 버튼이 지워져 버리네요(ㅜ.ㅜ)
: OnClick 이벤트 한번쓰면서 지우고 싶은데... 도와주세요??
:
: 지금도 많은 변수들을 전역변수로 쓰면서 생성했다가 지우고 있는데
: 이렇게 해야 되나요???
: --> 이런방법은 동적 생성 의미가 없는거 같은데;;;;;;
|