C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[28656] Re:이것줌 가리켜주세요....
강재호.만해 [greenuri] 937 읽음    2004-01-29 19:05
지후 님이 쓰신 글 :
: 동적으로 생성된 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를 사용해도 됩니다.

그럼 이만~

+ -

관련 글 리스트
28654 이것줌 가리켜주세요.... 지후 740 2004/01/29
34396     Re:이것줌 가리켜주세요.... ^^ㅊㄹ^^ 865 2004/01/30
34395     Re:이것줌 가리켜주세요.... 금목암 839 2004/01/30
28666     만해 님의 답변이 더 좋은 방법인것 같습니다..(내용 무) 머슴.한석복 762 2004/01/31
28665     Re:이것줌 가리켜주세요.... 머슴.한석복 760 2004/01/31
28656     Re:이것줌 가리켜주세요.... 강재호.만해 937 2004/01/29
34394         Re:Re:이것줌 가리켜주세요.... 금목암 789 2004/01/30
34393         Re:Re:이것줌 가리켜주세요.... 지후 815 2004/01/29
34392         Re:Re:이것줌 가리켜주세요.... 지후 1099 2004/01/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.