2017-05-18 51 views
-1

我希望這樣的事情應該工作:打開一個新的形式與特定的標籤

Form2.Show(); 
Form1.Hide(); 
Form2.PageControl1.ActivePage := TabSheet1; 

的事情是,我有多個按鈕(在第一種形式),我想對於每一個他們可以在PageControl的特定選項卡中打開新窗體。

錯誤:Undeclared identifier: 'TabSheet1'

+1

我經常使用的各這些命令沒有問題。那麼你的問題到底是什麼?我認爲你需要給予更多的幫助,最好是一個能夠顯示你的問題的小型示例程序。同時請說明它是Firemonkey還是VCL,以及您使用的Delphi版本。 – Dsm

+0

其VCL。它說:'未聲明的標識符''TabSheet1'' - Delphi 7 –

回答

2

的消息顯示,TabSheet1沒有定義 - 這可能是(雖然不向我們展示完整的代碼),因爲你的父對象外,所以你需要行

Form2.PageControl1.ActivePage := Form2.TabSheet1; 
1

Dsm的回答是提問的正確答案。

但是從設計的角度來看,雖然這樣可以正常工作,但它確實需要調用代碼來了解Form2的內部知識,這不是很好的類封裝。我將一個數據成員,而不是添加到Form2,表示期望的頁面在窗體的OnShow事件來顯示,然後調用Show()之前設置該成員,如:

type 
    TWhichTab = (wtNone, wtTab1, wtTab2, ...); 

    TForm2 = class(TForm) 
    PageControl1: TPageControl; 
    TabSheet1: TTabSheet; 
    TabSheet2: TTabSheet; 
    ... 
    procedure FormShow(Sender: TObject); 
    ... 
    public 
    ... 
    InitialTab: TWhichTab; 
    end; 

    procedure TForm2.FormShow(Sender: TObject); 
    begin 
    PageControl1.ActivePageIndex := Ord(InitialTab)-1; 
    end; 

Form2.InitialTab := wtTab2; 
Form2.Show(); 
Form1.Hide(); 
+0

是的,我同意,雖然我會進一步討論它,並且指出正在顯示什麼而不是哪個選項卡,因爲信息如何顯示應該是視覺對象。例如,標籤可能會重新排序,例如6個月。 – Dsm