Oppure

Loading
19/10/16 16:11
lupetto77
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:
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 ;)
aaa
20/10/16 7:14
sps84
Potresti al posto di fare una dll creare un exe e richiamare il file eseguibile tramite Process.Start ->

msdn.microsoft.com/it-it/library/…(v=vs.110).aspx
aaa
20/10/16 14:02
lupetto77
Ciao sps84 e grazie per la risposta, so che potevo usare un exe, ma volevo sapere se potevo farlo con una dll?
aaa
20/10/16 14:26
sps84
Prova a guardare qui:
stackoverflow.com/questions/2822326/…
letto velocemente, basta fare Application.Run etc ma NON ho mai provato e probabilmente sto dicendo una fesseria.:heehee:
aaa
20/10/16 19:54
Thejuster
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


Form f = new Form();

f.Controls.Add(ControlloUtente);

f.ShowDialog();



mire.forumfree.it/ - Mire Engine
C# UI Designer
20/10/16 23:42
lupetto77
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:
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 21/10/16 0:09
aaa
21/10/16 9:15
Thejuster
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


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


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 21/10/16 9:19
mire.forumfree.it/ - Mire Engine
C# UI Designer
21/10/16 14:00
lupetto77
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 21/10/16 15:51
aaa