2009-08-26 5 views
2

Ich habe Seitensteuerung in Hauptformular und Seite Kontrollen in den Kindern Form, es das Kind Form innerhalb der Hauptform platzieren, indem Docking-Funktionen verwenden.Merge Tabs von Kind Form in Hauptformular

I MDI nicht Stil bin mit

nun beide Formen haben Registerkarten in Seitensteuerung und ich brauche das Kind Form Tabs in die Hauptformularseite Kontrolle zu fusionieren, was ist der beste Weg, das zu tun?

Antwort

2

Dies ist ein ziemlich einfacher Ansatz, der Ihren Anforderungen entsprechen kann oder auch nicht.

Für jedes Kind Registerkarte müssen Sie zusammenführen:

  • erstellen Reiter in der Hauptform, um das Kind Seite entsprechenden Registerkarte

  • Iterate über die Kontrollen in der Steuer Kind Registerkarte und ändern Sie die Parent Eigenschaft auf die Registerkarte Sie nur erstellt

Sie müssen sich nicht mit Steuerelementen beschäftigen, die untergeordnete Steuerelemente sind. z.B. Wenn Sie in Ihrer untergeordneten Registerkarte ein Gruppenfeld haben, wird das Ändern des übergeordneten Elements sowohl als auch alle darin enthaltenen Steuerelemente zum neuen übergeordneten Element bringen.

Wenn Sie in der Lage sein müssen, Ihre Tabs an einem beliebigen Punkt zu "aufzumischen", müssen Sie einen Mechanismus entwickeln, um zu verfolgen, woher die Steuerelemente stammen, damit Sie das ursprüngliche Parent bei Bedarf wiederherstellen können.

Um die Dinge etwas leichter Sie TPanel in den Kindern Registerkarten platzieren können, mit seinen Align Eigenschaft auf alClient. Legen Sie alle Steuerelemente in der Registerkarte auf dieser Platte und dann, wenn Sie zusammenführen müssen/unmerge Sie müssen nur gesetzt die Elternteil der Tafelsteuerung.

+0

Wenn der ursprüngliche Inhalt Entwurfszeit gesetzt wird, dann ist diese Antwort etwas gefährlich becouse es Eigentum nicht berücksichtigt hat. Siehe [Wie eine Platte lösen und in einem separaten Fenster anzeigen?] (Http://stackoverflow.com/q/6461715/757830) – NGLN

4

Die einfachste und beste Möglichkeit, mehrere Registerkarten auf einer Seitensteuerung zu behandeln, ist normalerweise mit Frames. Nimm den Inhalt jeder Registerkarte und fache sie für jede Registerkarte in einen individuellen Rahmen aus. Verschieben Sie alle freigegebenen Komponenten, den Status und den Code in ein Datenmodul. Platzieren Sie diese Rahmen dann einfach auf den Registerkarten Ihrer Seitensteuerung.

0

Ich habe gerade versucht

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    while Form2.PageControl1.PageCount > 0 do 
    Form2.PageControl1.Pages[0].PageControl := PageControl1; 
end; 

und es funktionierte gut. Fehle ich etwas Offensichtliches, oder warum geben alle so raffinierte Lösungen? :-)

+0

Wenn der ursprüngliche Inhalt Entwurfszeit gesetzt wird, dann diese Antwort ist etwas gefährlich becouse es doesn‘ t das Eigentumsrecht berücksichtigen. Siehe (http://stackoverflow.com/q/6461715/757830) [Wie ein Panel und zeigt es in einem separaten Fenster lösen]? – NGLN