Ich würde das Ganze völlig anders organisieren.
Definiere einen enumerated type, der die Entitäten listet, die Du anzeigen und bearbeiten mußt:
Type
TBusinessEntity = (beKunde, beRechnung, ....);
In deinem TTreeData-Record würde ein Feld dieses Typs beschreiben, welche Art von Daten der Record enthält, als Ersatz für deinen FormIndex.
Für jede dieser Entities baust Du ein Form (oder besser ein Frame), das die zugehörigen Daten anzeigen kann. Alle diese Forms/Frames sind von einer Basisklasse abgeleitet (Stichwort visual form inheritance), von der sie eine public Methode oder ein interface erbene, mit deren Hilfe man dem Form/Frame z. B. ein TTreenode übergeben kann, um es mit Daten zu füllen.
Dann brauchst Du noch eine Factory für diese Forms, in der jede der Klassen sich registriert, zusammen mit dem TBusinessEntity-Wert, für das sie gedacht ist. Das erfolgt jeweils im Initialization-Teil der zugehörigen
Unit; die Factory selbst (eine Singleton) sitzt in einer eigenen
Unit.
Dein
case NodeData.FormIndex of
wird dann ersetzt durch
NewForm := Factory.CreateUIFor(Nodedata.Entity);
Wenn das Kundenform eines für eine Rechnung braucht, verwendet es einfach
RechnungsForm := Factory.CreateUIFor(beRechnung);
Damit hast Du nicht nur eine vollständige Entkopplung von Mainform und den anderen (die mainform-
Unit kennt nur die Factory,den enumerated type und die Basisklasse für die Forms), das Gerüst ist auch einfach erweiterbar, wenn Du neue Entities unterstützen mußt.