|
: 동적으로 탭시트를 생성하면서 메뉴도 각각 생성했습니다.
:
: 근데 만약 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인가를 검사해야 합니다.
그럼 참고하시길...
|