Oppure

Loading
21/10/08 22:53
lorenzoxx89
Ciao a tutti,
vorrei creare un programma in vb .net, in cui le form siano compilate come delle dll e che il progetto "centrale" le richiami visualizzandole in modo da lavorarci.
Tutto ciò vorrei farlo per rendere ovviamente il programma facilmente aggiornabile.
Come compilare le form? e soprattutto come richiamarle(con eventuali passaggi di variabili)?
Grazie in anticipo
aaa
22/10/08 7:01
Il Totem
Crei un'applicazione windows form, e modifichi come vuoi la tua form. Dopodiché, nelle proprietà progetto cambi il tipo di applicazione in Class Library, quindi compili, e ottieni una libreria *.dll.

Nel programma principale, cerchi tutte le dll nella cartella che desideri, e controlli che contengano un form, ad esempio in questo modo:
Dim Asm As Assembly = Assembly.LoadFrom(DllPath)
Dim Result As Form = Nothing

For Each T As Type In Asm.GetTypes
  If T.BaseType Is GetType(Form) Then
    Dim TypeName As String = T.FullName
    Result = Asm.CreateInstance(TypeName)
  End If
Next

Se alla fine del ciclo Result non è Nothing, allora contiene il form caricato dalla libreria.

P.S.: serve un "Imports System.Reflection"
aaa
22/10/08 12:53
lorenzoxx89
Grazie mille! ma le variabili, vengono condivise come se fosse una form interna al progetto o bisogna richiamarle in qualke modo?
aaa
23/10/08 17:22
Il Totem
Quel codice è un estratto da un mio programma, ed era all'interno di una funzione, che restituiva come risultato Result. Credo che l'ideale sarebbe replicare lo stesso meccanismo, preferibilmente includendo il form in una lista globale, o in una variabile globale come dici tu.
aaa
23/10/08 20:22
lorenzoxx89
non ci sono riuscito :(. il fatto è che vengo da vb6 e devo usare questo procedimento per iniziare un progetto importante.
mi potresti cortesemente inviare o dare un link di un piccolo progetto?
anke solo con una form e una dll, con la form ke apre la dll contenente un altra form.
Grazie
aaa
24/10/08 16:09
Il Totem
Imports System.Reflection

'...

Dim DllPath As String = Application.StartupPath & "\Form.dll"
Dim Asm As Assembly = Assembly.LoadFrom(DllPath)
Dim Result As Form = Nothing

For Each T As Type In Asm.GetTypes
  If T.BaseType Is GetType(Form) Then
    Dim TypeName As String = T.FullName
    Result = Asm.CreateInstance(TypeName)
    Exit For
  End If
Next

If Result IsNot Nothing
  Result.Show()
End If
aaa
24/10/08 20:39
lorenzoxx89
bella li grazie!
aaa
24/10/08 22:22
lorenzoxx89
ok quindi ora per passargli delle variabili se ho ben capito potrei far cosi: creo una classe e la metto in una dll. questa dll la importo sia nella form ke verra compilata come dll, sia nella form principale.
sarebbe giusto fare così?
---
non funziona ma ineffetti è logico.. le dikiarazioni vanno bene ma ora manca un metodo per passare le variabili .. help :(
Ultima modifica effettuata da lorenzoxx89 25/10/08 0:19
aaa