121 messaggi dal 08 settembre 2006
Buongiorno, sto lavorando su software in cui le windows form vengono aperte con una routine centralizzata a cui viene passato il nome della form e che crea una istanza della form corrispondente e la apre; il problema è che l'oggetto che viene creato è di tipo form generico e non del tipo specifico della form creata a livello di progetto, ad esempio io di solito ho sempre creato un'istanza della form in questo modo :

dim miaForm = new nomeForm dove nomeForm è quello definito nel progetto

in questo caso invece viene usato questo codice :

Dim nm As String
Dim fx As Form

Dim an As String = System.Reflection.Assembly.GetEntryAssembly().GetName.Name.Replace(" ", "_")

nm = an & "." & fm

Dim mt As Type = Type.GetType(nm)
fx = CType(Activator.CreateInstance(mt), Form)
return fx

questo sistema però preclude la possibilità di utilizzare proprietà 'personalizzate' definite nel codice della form relativa, usate ad esempio per scambiare dati da una form all'altra senza ricorrere a variabili/classi globali abbastanza deleterie;

cioè non riesco a fare fx.miaProprieta perchè la classe form (classe padre) non la definisce;

la prima cosa che mi è venuta in mente è di definire fx con un tipo dinamico in base al form che voglio aprire ma non sono riuscito a farlo, una specie di

dim fx as getType()

ci sono altre possibilità?

grazie
Modificato da bryger il 09 novembre 2017 14.35 -
Modificato da bryger il 09 novembre 2017 14.35 -
11 messaggi dal 01 febbraio 2017
Comincia ad utilizzare un oggetto generico ed imposti le proprietà come se fosse la form che vuoi utilizzare ... poi usando la tecnica dell'Activator ci sono diversi esempi in rete che ti permettono creare la classe e settarne le proprietà in maniera dinamica, c'è da impegnarsi un poco.
Ricordo di aver utilizzato un oggetto Type...
Trovato, questo è un pezzetto di codice ad esempio che ti permette di scrivere nalla intestazione della Form.
>>>>>
Dim Intestazione As String = "Testo della FORM .. PROVA"
Dim Obj1 As Object = Handle.Unwrap()
Dim Type1 As Type = Obj1.GetType
Dim Prop As PropertyInfo = Type1.GetProperty("Text") ' la proprietà da gestire di cui "appropiarsi"
If Prop IsNot Nothing Then
Prop.SetValue(Obj1, Intestazione, Nothing)
End If
>>>>>>>>>>>>>>

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.