Die Pagecontrol-Variante hat diverse direkt nutzbare Vorteile, beispielsweise kann man damit einen Wizzard sehr einfach umsetzen.
Ich verwende die Pagecontrols gerne, um einen komplexen Setup-Dialog zu implementieren: Links die Baumansicht der Setupkategorien und rechts für jeden Baumknoten die entsprechende Seite. Entweder hinterlege ich im Tag des Baumknotens den Pageindex oder gleich einen Verweis auf die Seite. Im OnChange-Event der Treeview kann ich dann die entsprechende Seite mit einem Einzeiler darstellen.
Mittlerweile tendiere ich jedoch zur Verwendung von Frames. Hat irgendwie mehr mit
OOP zu tun und SRP und so. Anstatt alle Controls auf verschiedene Seiten eines Pagecontrols in ein einziges Formular zu packen (und damit das Formular völlig zu überladen), erstelle ich mir lauter kleine Frames und instantiiere sie zur Laufzeit (oder pack sie trotzdem auf ein Pagecontrol).
Vermutlich ist ein Mittelding eine sehr gute Lösung: Ein Pagencontrol mit Seiten für jedes 'Panel' und pro 'Panel' ein eigenes Frame.
Dann hat man im eigentlichen Dialog ein kompaktes Framework für einen 'Wizzard' oder 'komplexen Setup-Dialog', den man sehr leicht erweitern und wiederverwenden kann. Die Dialoge scheren sich ja nicht bzw. kaum um den konkreten Inhalt der einzelnen Datenframes.