Form esterni all'exe

sabato 15 gennaio 2005 - 10.50

kevin Profilo | Junior Member

Ciao a tutti,
vorrei sapere se è possibile fare in modo che tutti i form che sono in un progetto visual basic .net, possano essere esterni all'exe e scritti su file esterni.
Vorrei fare questo per futuri aggiornamenti, visto che la mia applicazione e un'exe di 7mb, non vorrei mandare un file di 7mb per ogni aggiornamento che faccio alla mia applicazione, ma magari se aggiorno un form mando solo quello.
Come posso fare?

Grazie 1000

Cteniza Profilo | Guru

E' quello che ho fatto nell'applicazione che sto sviluppando:
Ho preso le form, e le ho messe su tante dll divise per categoria.
Carico le dll con la reflection, successivamente ciclo sui tipi (ho messo un attributo sulle form) e posso così referenziare e attivare le form con Activator.CreateInstance

kevin Profilo | Junior Member

scusami ma nn ho prorio idea di come posso inserire un form in una dll,
potresti spiegarmelo, o magari rimandarmi ad una guida.

Grazie ancora

Cteniza Profilo | Guru

Apri nuovo progetto windows forms
Vai nelle proprietà del progetto e cambia il tipo di destinazione
in dll

kevin Profilo | Junior Member

lo so che sono un rompi:)
Adesso riesco a crearlo, mi faresti un'esempio di codice che tu usi per importare e aprire un form sulla dll?
Grazie ancora

Cteniza Profilo | Guru

Aprire una dll -> guarda LoadAssembly
Fai un ciclo sui moduli contenuti (For Each mymod As System.Reflection.Module In asm.GetModules)
Fai un cilo sui tipi contenuti su ciascun modulo (For Each t As Type In mymod.GetTypes)
Controlli se si tratta di una form (io ho messo un attributo con la relativa classe che battezza la form)
If t.BaseType = GetType(System.Windows.Forms.Form) Then
Dim myattribute As Object() = t.GetCustomAttributes(GetType(ProgrammiAttribute), True)

Puoi attivare la form con
Dim frm As Form = CType(Activator.CreateInstance(t), Form)
frm.Show

kevin Profilo | Junior Member

Sono riuscito ad aprire un form di esempio dalla mia applicazione,
solo che se provo a prendere un form dalla mia applicazione e lo inserisco in una dll, non riesco a compilarla perche nel form che ho inserito nella dll ci sono dei tasti che linkano ai form che sono nell'applicazione,
come posso referenziarli dalla dll.
ho provato a fare aggiungi riferimento nella dll ma nn me lo fa fare giustamente perche il riferimento e un exe.

Cteniza Profilo | Guru

E' ovvio che il gruppo di form / classi / oggetti che hai nel tuo progetto "dll" deve essere compilabile (come dll) in modo autonomo per cui se utilizza oggetti come usercontrol in comune con altre dovresti rendere "dll" autonomi anche gli oggetti richiamati.
Quindi se main ha un oggetto "o" come riferimento
la form su dll non può avere main come riferimento ma puntare direttamente all'oggetto "o" in modo autonomo
Main potrebbe anche non avere nessun riferimento alla form su dll in quanto non gli serve per istanziare le sue forms


Brainkiller Profilo | Guru

Posso aggiungermi anche io confermando che la soluzione di Cteniza è ottima.
Infatti è un buonissimo esempio di come si possono estendere le applicazioni. E' sufficiente poi deployare la DLL aggiornata o aggiuntiva per aggiungere funzionalità all'applicazione madre.

Riguardo al file da 7 mega mi sembra un po' tanto. Come mai è così grosso , hai inserito delle immagini nelle Forms ?

ciao
david

kevin Profilo | Junior Member

si è pieno di grafica!
Grazie a tutti

Brainkiller Profilo | Guru

Ti consiglio di evitare di appesantire gli exe in questo modo.
Meglio posizionare le immagini su disco e caricarle a runtime oppure in un'altra DLL sottoforma di risorsa.

ciao
david

kevin Profilo | Junior Member

ho inserito come risorsa un'immagine, con nome main.jpg,
come posso importarla in una picturebox come sfondo?

Andy Profilo | Senior Member

Ciao..non includere l'immagine nelle risorse, lascia un file esterno al programma, e l'immagine la carichi Runtime all'apertura della tua applicazione.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5