Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Problema con dll
Forum - C# / VB.NET - Problema con dll

Avatar
lupetto77 (Normal User)
Pro


Messaggi: 75
Iscritto: 04/12/2011

Segnala al moderatore
Postato alle 18:11
Mercoledì, 19/10/2016
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

  1. Libreria_con_interfaccia_grafica.Form1 dll = new Libreria_con_interfaccia_grafica.Form1();
  2. dll.ShowDialog();
  3. 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 ;)

PM Quote
Avatar
sps84 (Normal User)
Expert


Messaggi: 202
Iscritto: 11/02/2009

Segnala al moderatore
Postato alle 9:14
Giovedì, 20/10/2016
Potresti al posto di fare una dll creare un exe e richiamare il file eseguibile tramite Process.Start ->

https://msdn.microsoft.com/it-it/library/system.diagnostics ...

PM Quote
Avatar
lupetto77 (Normal User)
Pro


Messaggi: 75
Iscritto: 04/12/2011

Segnala al moderatore
Postato alle 16:02
Giovedì, 20/10/2016
Ciao sps84 e grazie per la risposta, so che potevo usare un exe, ma volevo sapere se potevo farlo con una dll?

PM Quote
Avatar
sps84 (Normal User)
Expert


Messaggi: 202
Iscritto: 11/02/2009

Segnala al moderatore
Postato alle 16:26
Giovedì, 20/10/2016
Prova a guardare qui:
http://stackoverflow.com/questions/2822326/a-dll-with-winf ...
letto velocemente, basta fare Application.Run etc ma NON ho mai provato e probabilmente sto dicendo una fesseria.:heehee:

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 21:54
Giovedì, 20/10/2016
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

  1. Form f = new Form();
  2.  
  3. f.Controls.Add(ControlloUtente);
  4.  
  5. f.ShowDialog();





https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
lupetto77 (Normal User)
Pro


Messaggi: 75
Iscritto: 04/12/2011

Segnala al moderatore
Postato alle 1:42
Venerdì, 21/10/2016
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

  1. ucDll Dll = new ucDll();
  2.            
  3.             Form f = new Form();
  4.  
  5.             f.Controls.Add(Dll);
  6.  
  7.             f.ShowDialog();
  8.  
  9.             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
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 11:15
Venerdì, 21/10/2016
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

  1. TestForm f = new TestForm();
  2. f.Controls.Add(Dll);
  3.  
  4. DialogResult dlg = f.ShowDialog();
  5.  
  6. this.Hide(); //Nascondo questo form
  7.  
  8. //Apro il nuovo form
  9. if(dlg == DialogResult.OK)
  10. {
  11.   this.Show();
  12. }




Parte del TestForm

Alla chiusura, invio OK come segnale del dialogo

Codice sorgente - presumibilmente C# / VB.NET

  1. protected override void OnFormClosing(FormClosingEventArgs e)
  2. {
  3.   this.DialogResult = DialogResult.OK;
  4. }




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:

Testo quotato


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


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
lupetto77 (Normal User)
Pro


Messaggi: 75
Iscritto: 04/12/2011

Segnala al moderatore
Postato alle 16:00
Venerdì, 21/10/2016
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
PM Quote
Avatar
darioza (Normal User)
Pro


Messaggi: 104
Iscritto: 06/10/2014

Segnala al moderatore
Postato alle 12:51
Lunedì, 24/10/2016
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....

PM Quote