2017-05-18 4 views
-1

Ich habe gehofft, dass so etwas wie dies funktionieren soll:öffnen Sie ein neues Formular mit bestimmten Tab

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

Die Sache ist, dass ich eine mehr Tasten habe (in der ersten Form), und ich möchte für jeden von Sie öffnen das neue Formular in einer bestimmten Registerkarte des PageControl.

Fehler: Undeclared identifier: 'TabSheet1'

+1

ich regelmäßig jede verwenden dieser Befehle ohne Probleme. Also, was genau ist dein Problem? Ich denke, dass Sie ein bisschen mehr als das geben müssen, vorzugsweise ein kleines Beispielprogramm, das Ihr Problem zeigt. Bitte erkläre auch, ob es Firemonkey oder VCL ist und welche Version von Delphi du verwendest. – Dsm

+0

Seine VCL. Es sagt, dass 'Nicht deklarierte Bezeichner: 'TabSheet1'' - Delphi 7 –

Antwort

2

Die Meldung zeigt, dass TabSheet1 nicht definiert ist - und das ist wahrscheinlich (obwohl wir nicht zeigen, der vollständige Code), weil Sie außerhalb des übergeordneten Objekts sind, so müssen Sie die Zeile

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

Die Antwort von Dsm ist die richtige Antwort auf die gestellte Frage.

Aber aus einer Design-Perspektive, während das funktioniert, erfordert es den aufrufenden Code, um Kenntnisse von Form2 Interna, die keine gute Klasse Kapselung. Ich würde stattdessen ein Datenelement zu Form2 fügen Sie die gewünschte Seite, um anzuzeigen, in der Form der OnShow Ereignis anzuzeigen, und dann dieses Element festlegen, bevor Show() Aufruf, zum Beispiel:

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

Ja, ich stimme zu, obwohl ich es ein Stück weiter gehen und verweisen würde, was angezeigt wird, eher welche Registerkarte, weil, wie die Informationen angezeigt werden, sollte auf der visuelles Objekt. Tabs können zum Beispiel nach 6 Monaten nachbestellt werden. – Dsm

Verwandte Themen