Υπάρχει τρόπος, ο οποίος χρησιμοποιεί reflection. Αν υποθέσουμε ότι
όλες οι φόρμες που θέλεις να ανοίξεις, και ο κώδικας που τις ανοίγει
βρίσκονται στην ίδια assembly, τότε χρησιμοποιείς την
Assembly.GetExecutingAssembly().CreateInstance("MyNamespace.MyFormName",
true) για να δημιουργήσεις ένα instance της φόρμας, το οποίο θα κάνεις
typecast σε System.Windows.Forms.Form και θα το χειριστείς μετά σαν
φόρμα.
Χρειάζεσαι exception handling στην αποτυχία του φορτώματος της κλάσης
(βλ. το documentation της CreateInstance), και για την περίπτωση που το
όνομα της κλάσης δεν αντιπροσωπεύει φόρμα. Επίσης χρειάζεσαι επίπεδο
security που να επιτρέπει το reflection.
Αν τώρα οι φόρμες δε βρίσκονται μέσα στην ίδια assembly, τότε περνάς
στην System.Activator, με τις CreateInstance/CreateInstanceFrom.
Κάθε φορά που το συναντάω μπροστά μου συνειδητοποιώ πόσο λατρεύω το reflection.
Νατάσα Μανουσοπούλου