Chiusura ed apertura seconda form

martedì 30 maggio 2006 - 10.56

trinity Profilo | Guru

ragazzi,
ho due form: FormA e FromB

avvio FormA (non deve essere una splashscreen)

eseguo codice

devo chiudere FormA ed aprire FormB la quale è il menu iniziale e dove poi avviene la connessione al db.

provo a fare così:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim FromB As New Menu
FormB.show()
Me.Close()
End If

ma mi chiude l'intero programma.
Devo andare in vacanza
Su una stupitaggine del genere mi sono bloccato. Help me!!!
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

Klaus-zanini Profilo | Senior Member

Non potresti creare una classe a parte (magari anche su un progetto a parte) che ti gestisce il lancio delle 2 form? Ossia un main che ti apre il FormA e quando devi scatenare l'evento che apre B e chiude A setti una proprietà sul main che a quel punto può lanciare B lasciando morire A?
Il main sarebbe il tuo programma principale e A potrebbe chiudersi senza problemi no?

trinity Profilo | Guru

Vorrei farlo tutto sullp stesso progetto e non utilizzarne un altro
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

Klaus-zanini Profilo | Senior Member

Beh allora ti consiglio di creare un altra classe nel tuo progetto e farla in questo modo:

Public Class App

Public Shared ShowB As Boolean

<STAThread()> _
Public Shared Sub main(ByVal sArgs As String())
Dim frmA As New FormA
frmA.ShowDialog()
If ShowB Then
Dim frmB As New FormB
frmB.ShowDialog()
End If
End Sub

End Class

Poi imposta il progetto in modo tale che sia questa classe quella di partenza.
Chiaramente nella classe FormA avrai il metodo

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
App.ShowB = True
Me.Close()
End Sub

Potrebbe risolvere il tuo problema?

trinity Profilo | Guru

>Poi imposta il progetto in modo tale che sia questa classe quella
>di partenza.
non ho capito questo pezzo, come faccio ad impostarla come partenza. nella configurazione del progetto la formA è quella di partenza
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

Klaus-zanini Profilo | Senior Member

Quando sul progetto fai tasto destro e scegli proprietà metti come progetto di avvio questa nuova classe (App).
Non sarà più formA la classe di avvio, ma visto che il metodo main che ti ho scritto fa come prima operazione proprio il lancio della formA è come se stessi lanciando lanciando lei!
Capito?
Anziché dire al tuo progetto "lancia FormA, che chiusa lei chiudi tutto", dici "lancia App che a sua volta lancia FormA e quando FormA si chiude App è ancora attivo e può lanciare FormB".
Non sono bravissimo a spiegarmi...ma spero tu abbia capito.

alextyx Profilo | Expert

Se imposti come oggetto di avvio del progetto la 'sub main' e lanci l'applicazione 'slegata' da una form, puoi chiudere la tua form principale senza che si chiuda anche l'applicazione.
Devi mettere istruzioni tipo queste, in un modulo:

Module Module1

Dim FStart As New Start

Public Sub Main()

Fstart.Show
Application.Run()

End Sub

End Module



Adesso per chiudere l'applicazione devi esplicitamente invocare il metodo:

Application.exit()

Ho scritto un po' a memoria...mi sembra che si scriva così....spero di non aver fatto troppi errori e/o omissioni

trinity Profilo | Guru

Sai come ho risolto?
Semplicemente vb net nelle proprietà del progetto ha l'opzione della seguente scelta:

Modalità arresto:
Alla chiusura del form avvio
Alla chiusura dell'ultimo form

Scegliendo la seconda opzione ed essndo il form menu principale l'ultimo che rimane aperto, visto che da lì girano tutte le funzioni del programma, ecco che posso evocare così la form:

ci troviamo nella formA:

Dim FormB An New Menu
FormB.Show()
Me.close()

Ciao e grazie per i consigli
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

alextyx Profilo | Expert

Certo! Basta che ti ricordi di avere almeno una form aperta prima di chiudere l'altra!
Non mi era venuta in mente, ma anche questa è una soluzione!
Vedi quanto fa bene scambiarsi le idee!
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