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 - Form in dll
Forum - C# / VB.NET - Form in dll - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 9:54
Venerdì, 19/06/2009
Il codice ci Chiudi() è scorretto. Infatti, se bisogna chiudere tutte le form aperte dalla libreria, risulterà che dopo la prima, l'applicazione è terminata (Me.Close() chiude semplicemente il form principale, ma, se non modificata, questa è la condizione che provoca la chiusura del programma). Basterebbe semplicemente un frm.Close(). Ma bisogna ancora vedere come passare le istanze create dalla libreria al form principale. Io ho avuto questa idea: la prima form della dll sarà sicuramente aperta dalla routine principale, quindi un collegamento fra le due c'è. In questo momento, bisognerebbe salvare nella 2a form un riferimento alla main form: mediante questo sarebbe possibile lanciare un evento (creato ex novo, ovviamente), che comunicherebbe tutti i nuovi form aperti. Ad esempio:

Codice sorgente - presumibilmente VB.NET

  1. Class Form1
  2.   Class NewFormEventArgs
  3.     Inherts EventArgs
  4.     Private _NewForm As Form
  5.  
  6.     Public ReadOnly Property NewForm() As Form
  7.       Return _NewForm
  8.     End Property
  9.  
  10.     Sub New(ByVal NewForm As NewForm)
  11.       _NewForm = NewForm
  12.     End Sub
  13.   End Class
  14.  
  15.   Public Event NewFormOpened As EventHandler(Of NewFormEventArgs)
  16.   Private NewForms As New List(Of Form)
  17.  
  18.   Public Sub RaiseNewFormEvent(ByVal Sender As Form, ByVal Target As Form)
  19.     RaiseEvent NewFormOpened(Sender, New NewFormEventArgs(Target))
  20.   End Sub
  21.  
  22.   Private Sub Program_NewForm(ByVal sender As Object, ByVal e As NewFormEventArgs) Handles Me.NewFormOpened
  23.     Me.NewForms.Add(e.NewForm)
  24.   End Sub
  25.  
  26.   Private Sub CloseAll()
  27.     For Each F As Form In Me.NewForms
  28.       F.Close()
  29.     Next
  30.   End Sub
  31.  
  32.   Private Sub OpenForm2()
  33.     '... codice per leggere la libreria
  34.     frm.ShowAndLink(Me)
  35.   End Sub
  36.  
  37. End Class



Codice sorgente - presumibilmente VB.NET

  1. Class Form2
  2.   Private Parent As Form1
  3.  
  4.   Public Sub ShowAndLink(ByVal Parent As Form1)
  5.     Me.Parent = Parent
  6.     Me.Parent.RaiseNewFormEvent(Me, Me)
  7.     Me.Show()
  8.   End Sub
  9.  
  10.   Public Sub OpenForm()
  11.     '... carichi gli altri form
  12.     Me.Parent.RaiseNewFormEvent(Me, NuovoForm)
  13.   End Sub
  14. End Class


PM Quote
Avatar
manvb.net (Member)
Guru


Messaggi: 663
Iscritto: 28/01/2008

Segnala al moderatore
Postato alle 11:04
Venerdì, 19/06/2009
Oops, ho frainteso, credevo dovesse aprire solo 2 form.

PM Quote
Avatar
Exit93 (Ex-Member)
Rookie


Messaggi: 34
Iscritto: 31/03/2008

Segnala al moderatore
Postato alle 20:00
Domenica, 05/07/2009
Ho avuto problemi con la rete e non ho potuto vedere qui

In ogni caso un po' non ho capito e/o un po' forse non mi son spiegato xD

Praticamente l'utente apre un numero che io non conosco di dll
Più precisamente vorrei sapere un modo per chiudere tutti i form presenti in una dll a partire dal percorso di suddetta dll, è possibile?

Oppure magari riuscire a vedere quali form sono aperti

Ultima modifica effettuata da Exit93 il 05/07/2009 alle 20:03
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 10:06
Lunedì, 06/07/2009
Forse... Application.OpenForms?

PM Quote
Avatar
Exit93 (Ex-Member)
Rookie


Messaggi: 34
Iscritto: 31/03/2008

Segnala al moderatore
Postato alle 15:05
Lunedì, 06/07/2009
Eh ma poi come faccio a chiudere un form a partire dalla dll?
Oppure potrei fare che i form aperti vengono visualizzati in una listbox, ma poi per chiuderli partendo dall'oggetti nella lista come faccio?

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 8:58
Martedì, 07/07/2009
Ma credo che Application.OpenForms restituisca una collezione di ogni form aperto dall'applicazione, indipendentemente da dove provenga (quindi includerebbe anche quelli inizializzati a partire dalla libreria esterna). Per chiudere solo quelli appartenenti ad una certa libreria, basta usare un po' di reflection: per ogni form aperto individui il tipo a cui appartiene, quindi scorri la dll di cui hai il percorso per trovare tutti i tipi ivi definiti. Se trovi un form il cui tipo è definito nella dll, allora lo chiudi.

PM Quote
Avatar
Exit93 (Ex-Member)
Rookie


Messaggi: 34
Iscritto: 31/03/2008

Segnala al moderatore
Postato alle 9:58
Giovedì, 09/07/2009
Testo quotato

Postato originariamente da Il Totem:

Ma credo che Application.OpenForms restituisca una collezione di ogni form aperto dall'applicazione, indipendentemente da dove provenga (quindi includerebbe anche quelli inizializzati a partire dalla libreria esterna). Per chiudere solo quelli appartenenti ad una certa libreria, basta usare un po' di reflection: per ogni form aperto individui il tipo a cui appartiene, quindi scorri la dll di cui hai il percorso per trovare tutti i tipi ivi definiti. Se trovi un form il cui tipo è definito nella dll, allora lo chiudi.



Tradotto in codice quindi come verrebbe?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo