lupetto77 (Normal User)
Pro
Messaggi: 75
Iscritto: 04/12/2011
|
Ciao a tutti, stavo facendo una prova nel creare una dll con interfaccia (una normale Windows Form...), e un altro progetto con un button per richiamare la dll.
Nel codice del button ho scritto questo:
Codice sorgente - presumibilmente C# / VB.NET |
Libreria_con_interfaccia_grafica.Form1 dll = new Libreria_con_interfaccia_grafica.Form1();
dll.ShowDialog();
Application.Exit();
|
Cosi facendo si apre la finestra presente della dll, ma la finestra del progetto rimane aperta (anche se ho usato Application.Exit()), mentre io vorrei chiuderla.
Se uso dll.Show();
Si apre per un secondo e si richiude tutto.
A me serve che la finestra del progetto una volta che richiama la dll si deve chiudere, perchè poi dovrei sovrascrivere il file exe del progetto.
Se mi rimane aperta non posso farlo, avete idee su come risolvere?
Grazie in anticipo
|
|
sps84 (Normal User)
Expert
Messaggi: 202
Iscritto: 11/02/2009
|
|
|
lupetto77 (Normal User)
Pro
Messaggi: 75
Iscritto: 04/12/2011
|
Ciao sps84 e grazie per la risposta, so che potevo usare un exe, ma volevo sapere se potevo farlo con una dll?
|
|
sps84 (Normal User)
Expert
Messaggi: 202
Iscritto: 11/02/2009
|
|
|
Thejuster (Admin)
Guru^2
Messaggi: 2305
Iscritto: 04/05/2008
|
Il trucco è questo
Crea un progetto WinForm
Ingnora il Form1 e tutto il resto.
Crea un controllo utente vuoto
disegnalo come fosse un form normalissimo
e lo puoi anche programmare ovviamente.
successivamente, cambia il tipo di progetto.
in proprietà
Da Applicazione in Libreria.
Compila, e invece dell'exe ti ritrovi la libreria
quando la importi nel nuovo progetto, appare il tuo controllo utente
trascinalo in un form e hai fatto oppure semplicemente
Codice sorgente - presumibilmente C# / VB.NET |
Form f = new Form();
f.Controls.Add(ControlloUtente);
f.ShowDialog();
|
|
|
lupetto77 (Normal User)
Pro
Messaggi: 75
Iscritto: 04/12/2011
|
Ciao Thejuster e grazie per la risposta e l'aiuto.
Posto i passi che ho fatto:
1.Creato un nuovo progetto ignorando il Form1 e il resto come mi hai scritto nel post
2.Fatto tasto destro su NomeProgetto->Aggiungi->Controllo utente...
3.Vado nelle proprietà e in Tipo di output: Imposto -> Libreria di classi
4.Compilo
5.Viene creata la dll
1.Ho creato un nuovo progetto Windows Form
2.Ho importato il riferimento alla dll e la using riferita al progetto sopra, il codice che ho inserito è questo:
Codice sorgente - presumibilmente C# / VB.NET |
ucDll Dll = new ucDll();
Form f = new Form();
f.Controls.Add(Dll);
f.ShowDialog();
Application.Exit();
|
Si apre la finestra che contiene l'user control ma non mi chiude la finestra del chiamante, quindi il risultato è come quello del mio primo post.
Application.Exit() non fa chiudere solo la finestra del chiamante ma tutte.
Come potrei fare?
Ultima modifica effettuata da lupetto77 il 21/10/2016 alle 2:09 |
|
Thejuster (Admin)
Guru^2
Messaggi: 2305
Iscritto: 04/05/2008
|
Il programma funziona in questo modo.
La finestra madre e quella che comanda il programma intero.
Se viene chiusa quella viene chiuso il programma.
La soluzione è fare Hide prima di mostrare l'altro form con il controllo
o un qualcosa del genere
Crea un un form vuoto senza controlli
lo chiamiamo esempio TestForm
Codice sorgente - presumibilmente C# / VB.NET |
TestForm f = new TestForm();
f.Controls.Add(Dll);
DialogResult dlg = f.ShowDialog();
this.Hide(); //Nascondo questo form
//Apro il nuovo form
if(dlg == DialogResult.OK)
{
this.Show();
}
|
Parte del TestForm
Alla chiusura, invio OK come segnale del dialogo
Codice sorgente - presumibilmente C# / VB.NET |
protected override void OnFormClosing(FormClosingEventArgs e)
{
this.DialogResult = DialogResult.OK;
}
|
Premuto ok, Il form aperto contenente il controllo si chiude
e quello madre viene rivisualizzato.
se vuoi chiudere direttamente l'applicazione, dal codice di prima
anziché fare this.Show(); esegui Application.Exit();
EDIT:
Si apre la finestra che contiene l'user control ma non mi chiude la finestra del chiamante, quindi il risultato è come quello del mio primo post.
Application.Exit() non fa chiudere solo la finestra del chiamante ma tutte.
Come potrei fare?
|
Ovviamente, Application.Exit significa "Chiudi Applicazione"
e ovvio che ti faccia chiudere tutte le finestre.
Se vuoi chiudere solo quel forum o qualche altro form aperto,
o usi il sistema del dialogo che ti ho mostrato
o semplicemente
f.Close();
Ultima modifica effettuata da Thejuster il 21/10/2016 alle 11:19
|
|
lupetto77 (Normal User)
Pro
Messaggi: 75
Iscritto: 04/12/2011
|
Grazie e ciao Thejuster
So che con Application.Exit() chiude tutte le form, ma io volevo sapere se c'è un modo, dalla form principale di aprire in questo esempio la dll, e subito dopo chiudere la form principale per poter cancellare il suo exe.
Perchè se lo faccio usando un progetto exe esterno al posto della dll, con System.Diagnostics.Process.Start() funziona perchè richiamo un progetto esterno quindi subito dopo la chiamata posso terminare con Application.Exit(), ma la mia curiosità è se potevo farlo con una dll.
E' possibile?
Ultima modifica effettuata da lupetto77 il 21/10/2016 alle 17:51 |
|
darioza (Normal User)
Pro
Messaggi: 104
Iscritto: 06/10/2014
|
Dovresti fare in modo che la dll sia caricata su un processo diverso...
Ma a colpo non mi viene in mente nulla...
Fosse un exe, potresti avviarlo in modo indipendente dalla finestra principale, che poi andrai a chiudere, e controllare tutto dal secondo eseguibile.
Con una dll probabilmente si può fare, ma a colpo, non mi viene in mente nulla....
|
|