"동적생성" 이라는 키로 검색해보세요
엄청 많이 나와요
[검색한것]
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=43743
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=43189
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_qna&no=38170
[동적생석 Control의 이벤트 핸들러 등록]
원리는 간단해요
TEdit* 든 TButton * 이든 이벤트 핸들러를 연결하려면
1. 일단 연결할 함수는 미리 만들어 두어야 하구요
- 함수를 만들때.. MouseClick 이면 Click 에 맞는 형으로
- KeyDown 이면 KeyDown에 맞는형으로 만들어 두면 되구요
2. 그런다음 살아있는 Control에 연결하면 되요
( 살아있다는 말은 Design 타임에서 만든것이든, 코딩으로 생성한것이든 control이 destory되기 전을 말합니다.)
( 다시 말해 살아있는동안에는 언제든지 연결및 헤제가 자유롭다는 말입니다.)
연결은 이런식으로 간단히...
List[i].Documents->OnKeyDown = MyKeyDown ;
List[i].Documents->OnClick = MyClick ;
List[i].Documents->OnChange = MyChange ;
3. 연결되는 함수를 바꾸고자한다면?
List[i].Documents->OnKeyDown = MyKeyDown2 ;
List[i].Documents->OnClick = MyClick2 ;
List[i].Documents->OnChange = MyChange2 ;
4. 연결함수를 없애고 싶다면
List[i].Documents->OnKeyDown = NULL ;
List[i].Documents->OnClick = NULL ;
List[i].Documents->OnChange = NULL ;
5. 만약 다른 Form(또는 다른 Class Object)에 있는 함수를 연결하고자 한다면...
List[i].Documents->OnKeyDown = Form2->MyKeyDown;
이경우에는 (생성한 Control이 Form1이고 연결할 함수가 Form2에 있는경우)
Form2에 있는 MyKeyDown함수가 public 이어야 겠죠
추신 :
위에서 이벤트 핸들러를 NULL로 설정해서 없애는 방법은
Form을 Destory할때 (또는 프로그램을 종료할때) Form위에 올려진 Control들에서
OnItemChange나 OnTimer , OnDisconnect 이벤트들이 발생하기도 합니다.
이때 destory순서가 잘못된경우나 또는 이벤트핸들러함수에서 코딩이 잘못된경우
Access Violation 이 나는 경우가 있습니다.
이런경우에는
FormDestory에서 이벤트 핸들러들을 NULL로 해준뒤에
delete하시면 문제가 해결됩니다.
검색을 잘 활용하면 Plus + alpa를 얻을수 있어요
이한진 님이 쓰신 글 :
: program-----
:
: for (int i=0; i<pIndex; i++ )
: {
: List[i].Documents = new TEdit(this);
: List[i].Documents->Parent = FormMain;
: List[i].Documents->Height = 21;
: List[i].Documents->Width = 373;
:
: List[i].pDocuments->Left = LeftPos;
: List[i].pDocuments->Top = 40 + ( i * 27 );
: List[i].Documents->Left = 4;
: List[i].Documents->Top = 3;
: List[i].Documents->Tag = i;
: }
: new 로 해서 위내용처럼 pIndex 만큼 에디터를 생성했습니다.
: 이렇게 생성한 에디터의 내용을 변경하기 위해 이벤트를 발생시키고자한다면
: 어떻게 해야 하나요..?
:
: 이렇게 하게된 이유가
: 에러 리스트나 입출력 리스트를 폼에 미리 다 만들어 놓은면 편집하기도 편하긴 한데
: 저의 짧은 생각으로는 메모리도 많이 차지 할것 같기도 하고해서 기냥
: 이렇게 했거든요..하다보니 꼭 그런것도 아니고, 힘만 더 들기도 했지만요
:
: 그래도 하던거 마무리를 져야 할 것 같아 해보려 했더니 에디터에서 발생하는 이벤트를
: 어떻게 사용하는지가 문제더군요
:
: 몇몇분께 물어봤더니 WINDOWS MESSAGE 인가요! 그걸 써야 할것 같다는 분도 있던데..
: 해보면 좋을듯 한데 왠지 겁부터 나서리..ㅜㅜ
: 암튼 좋은 방법있으면 알려주시면 감사하겠습니다..^^