2010-12-13 56 views
2

我有一個TPageCOntrol其中有3 TTabSheet並且其中一些有進一步TPageCOntrol其中有一個TTabSheet排序的如何在用戶切換到嵌套標籤頁時執行一些代碼?

Page Control 1 
    TabSheet 1 
    TabSheet 2 
    Page Control 2 
     TabSheet 2a 
     TabSheet 2b 
    TabSheet 3 

現在,每當這些tabsheets之一變得可見我想執行用戶一些代碼,但我不確定要掛鉤哪個事件。

例如,如果用戶正在看TabSheet 1並切換到TabSheet 2其中TabSheet 2a是顯示,那麼我想執行標籤頁2a中的代碼,但我不能鉤住標籤頁2a中的的OnEnter或OnShow中。這不是Page Control2的OnChange。

事實上,我所看到的只是將一大堆開關/外殼放入頁面控件1的OnChange事件中......是更好的方法嗎?

回答

2

我迷上了每個PageControl的OnChange()並檢查了ActivePage。它適用於我,無需重新設計即可使用框架。

+0

+1,使用框架只是一個建議,您的OnChange建議也不錯 – ComputerSaysNo 2010-12-14 05:12:47

4

每個TabSheet都有「OnShow」事件,只要用戶點擊它並使其可見,就會觸發該事件,但應該這樣做,但是在具有另一個頁面控件作爲父級的標籤頁中包含頁面控件,因此它很漂亮在UI上沉重,嘗試使用您將在標籤頁的OnShow事件上創建的框架,並在標籤頁的OnHide事件上銷燬。

編輯: 如果您選擇在標籤頁內使用TFrame,請轉到框架的「公共」部分,按CTRL +空格並鍵入「create」,以便覆蓋「Create」構造函數並重復「銷燬」,所以你會覆蓋,以及

+0

ERRM,謝謝,但我寧願只是去用它,它是,而不是使用框架的方式.... – Mawg 2010-12-14 02:10:57

+0

,我給了一個例子,其中用戶將不會在標籤上舔,但當他點擊它的父標籤時,仍然會看到它(意思是我的代碼需要更新它)。 – Mawg 2010-12-14 02:59:27

+0

框架幾乎像標籤頁一樣,只是你可以重用它作爲「視圖」,我首先提出框架的唯一原因是事實上,你可以在應用程序的其他部分重用框架,但一切都來了根據您的設計需求和選擇,玩得開心;-) – ComputerSaysNo 2010-12-14 05:14:14

1

我在標籤頁上嚴格使用「onEnter」事件。但是我只有在焦點進入到標籤頁時纔會被解僱。所以當頁面控件更改時,我已手動將焦點設置到標籤頁中。

procedure TForm1.PageControl1Change(Sender: TObject); 
begin 
    pagecontrol1.ActivePage.SetFocus; 
end 
相關問題