Ciao
Potresti usare la Reflection: ottieni l'assembly della tua applicazione con Assembly.GetExecutingAssembly, dall'assembly ottieni il tipo in base al nome con l'istruzione GetType(String), e in seguito chiami il costruttore sul tipo per creare l'oggetto. Scrivo una funzione che fa una cosa generalizzata per ciascun tipo:
''' <summary>
''' Carica un oggetto di tipo T dall'assembly corrente
''' </summary>
''' <typeparam name="T">Tipo restituito</typeparam>
''' <param name="name">Nome del tipo (incluso namespace)</param>
''' <param name="params">parametri del costruttore,
''' oppure nothing per il costruttore predefinito</param>
''' <returns>Un'istanza del tipo identificato da name</returns>
Function LoadObject(Of T)(ByVal name As String, ByVal ParamArray params() As Object) As T
Dim result As T
Dim curAssembly As Assembly = Assembly.GetExecutingAssembly()
Dim tp As Type
Try
tp = curAssembly.GetType(name, True, True)
Catch
Throw
End Try
Dim parameters() As Type
If params Is Nothing Then
parameters = Type.EmptyTypes
Else
ReDim parameters(params.Length - 1)
For i As Integer = 0 To params.Length - 1
parameters(i) = params(i).GetType()
Next
End If
result = tp.GetConstructor(parameters).Invoke(params)
Return result
End Function
E questo è un esempio di come potresti usare la funzione:
Sub Test()
Dim altraForm As Form = LoadObject(Of Form)("TuoNamespace.AltraForm", Nothing)
altraForm.Show()
End Sub
Luca