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
[2656] Re:동적으로 생성된 탭시트들중...
박지훈.임프 [cbuilder] 3850 읽음    2000-01-08 00:00
: 동적으로 탭시트를 생성하면서 메뉴도 각각 생성했습니다.
:
: 근데 만약 3개의 탭시트를 만들었는데 2번째 탭시트를 ActivePage로 만들려고 합니다.
:
: 즉 메뉴도 보면 3개가 만들어져있는데 두번째 메뉴아이템을 선택하면 탭시트역시 2번째인게 ActivePage로 되게 할려고 합니다.
:
: 어떻게해야할지...
:
: 어떻게 질문을 해야할지 잘몰라서 이렇게 씁니다. ^.^
:
: 그럼 좋은하루 되세요~



임펠리테리입니다.

먼저, TTabSheet의 현재 페이지를 코딩으로 바꾸는 방법. ActivePage 프로퍼티에 바꿀 페이지의
객체 포인터를 집어넣으면 됩니다. 특정 인덱스의 페이지의 객체는 Pages[Index]로 알아냅니다.
그러므로, 다음과 같이 하면 0번째 페이지가 선택됩니다.
PageControl1->ActivePage = PageControl1->Pages[0];

그리고 메뉴아이템의 인덱스 알아내기. TMenuItem의 MenuIndex를 읽으면 됩니다. 그런데, 원하시는
기능을 구현하려면 메뉴아이템의 OnClick 이벤트에서 처리해야 할 것이므로, 여기서 클릭된 메뉴
아이템을 알아내려면 이벤트핸들러의 인자로 넘어온 Sender를 TMenuItem * 형으로 캐스팅해야
합니다. 그러므로 전체적인 코드는 다음과 같이 되겠지요?

void __fastcall T폼이름::메뉴아이템클릭핸들러(TObject *Sender)
{
    int MenuIndex = ((TMenuItem *)Sender)->MenuIndex;
    PageControl1->ActivePage = PageControl1->Pages[MenuIndex];
}

만약 위에서 작성한 핸들러가 메뉴아이템의 OnClick때 외에도 호출될 때가 있다면 위에서처럼
표준 C/C++ 캐스팅이 아닌 dynamic_cast를 써서 Sender가 TMenuItem인가를 검사해야 합니다.

그럼 참고하시길...

+ -

관련 글 리스트
2653 동적으로 생성된 탭시트들중... 서영재 3742 2000/01/08
2656     Re:동적으로 생성된 탭시트들중... 박지훈.임프 3850 2000/01/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.