|
지후 님이 쓰신 글 :
: 동적으로 생성된 Edit가 256개가 있습니다..
: 그리고 이벤트를 넣었는데..
: 생성된 Edit를 하나 클릭하면 모든것이 바뀌어 버립니다..
: 제가 클릭한 Edit박스만 바꾸는 방법은 없나요?
: 그리고 클릭을 하면 그 Edit박스에 있는 값을 변수에 저장을 하고 싶은데
: 어떻게 해야할지 모르겠어요.. 가리켜주세요
:
안녕하세요 만해입니다.
제가 주로 쓰는 방법을 소스로 올려 드릴께요
참고 하세요
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <vector>
using namespace std;
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall EditEnter(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
vector<TEdit*> EdtVector;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for ( int i = 0 ; i < 10 ; i ++ )
{
// 에디터를 동적으로 생성하고요 여기서 이벤트 핸들러도 등록 시킵니다.
TEdit* Edt = new TEdit(this);
Edt->Parent = Form1;
Edt->Left = i * 30;
Edt->Top = 50;
Edt->Visible = true;
Edt->Text = AnsiString(i);
Edt->Width = 20;
Edt->OnEnter = EditEnter;
// 위의 구문이 이벤트 핸들러를 등록 시키는 부분이고요
// 이렇게 등록 시키고 난 다음에
Edt->Tag = i;
// 각각의 에디터를 구분하기 위해 Tag를 설정해줍니다.
EdtVector.push_back(Edt);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
// 이 구문은 동적으로 할당된TEdit를 삭제 하는 부분입니다.
while (!EdtVector.empty())
{
TEdit* Edt = EdtVector[EdtVector.size()-1];
delete Edt;
EdtVector.pop_back();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::EditEnter(TObject *Sender)
{
// Tag가 설정이 되어 있는걸 Sender에서 dynamic_cast연산자로 캐스팅 시켜서
// Tag를 가져와서 어떤 에디터가 클릭되었는지 알아 낼수 있습니다.
int EdtTag = dynamic_cast<TEdit*>(Sender)->Tag;
ShowMessage(AnsiString(EdtTag) + " Clicked");
}
//---------------------------------------------------------------------------
동적으로 생성된 Edit의 Tag를 통해 각각의 에디터를 식별하는 방법을 추천 드립니다.
그리고 vector객체가 어려우시면 TList를 사용해도 됩니다.
그럼 이만~
|