Cambio di form

di il
10 risposte

Cambio di form

Buon pomeriggio a tutti!
Vorrei qualche consiglio da voi.
Io ho un piccolo problema molto fastidioso,
io ho un form, chiamiamolo form1.
form1 è sempre attivo, cioe un form che non viene mai chiuso.
cliccando su questo form vado ad aprire un altro form, chiamato form2.
ora se clicco su form2, apro form3 e chiudo form2, lasciando form1 e form3 aperti.
tutti sono fullscreen, e in primo piano avrò form3,
il problema e che quando faccio:
form3.show
me.close (in questo caso chiudo form2)
in questo passaggio per 1 secondo ( forse meno) vedo form1.
Se non ci fosse sotto form1 io comunque vedrei il desktop del pc per quel secondo.
Ora i form sono ricchi di immagini,background ecc.... e nell'evento Load ridimensiono qualche tasto e faccio qualche connessione ai DB.
Il doublebuffered è attivo.
Pensavo di creare su ogni pagina in ogni load un BackgroundWorker.
Avete un altro consiglio?, anche perche non so se è la scelta più giusta
grazie Mille

10 Risposte

  • Re: Cambio di form

    Potresti provare a chiudere form2 nell'evento load di form3
  • Re: Cambio di form

    Già fatto, ma il risultato non cambia
  • Re: Cambio di form

    Nell'evento load di form3 utilizzi Application.OpenForms per recuperare il form2 ? ,prova a postare li codice
  • Re: Cambio di form

    Non uso Application.OpenForms (ora mi documento).
  • Re: Cambio di form

    Ma serve solo per avere la lista dei form aperti nell'applicazione?
    Il codice sorgente è molto semplice.
    
    Public sub  evento_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     Dim MysqlConn As MySqlConnection
            Dim COMMAND As MySqlCommand
            Dim READER As MySqlDataReader
            MysqlConn = New MySqlConnection
            MysqlConn.ConnectionString =
                "server= localhost;userid=id;password=password;database=prova"
            Try
                MysqlConn.Open()
                Dim Query As String
                Query = "SELECT........
                COMMAND = New MySqlCommand(Query, MysqlConn)
                READER = COMMAND.ExecuteReader
                While READER.Read()
                End While
                MysqlConn.Close()
            Catch ex As MySqlException
                MessageBox.Show(ex.Message)
            Finally
                MysqlConn.Dispose()
            End Try
            
            Form2.close()
    End Sub
    
    Ora qualsiasi cosa metto nel Load, e sia che se chiudo il form2 nel load del form3 o col tasto chiudi del form2, quando passa da un form all'altro, c'è sempre quel difetto fastidioso.
  • Re: Cambio di form

    Ma il problema non è tanto cosa c'è nel load del form, perchè commentando tutto, il problema rimane.
    Secondo me il problema sono i controlli e lo sfondo del form che hanno come sfondo delle immagini .png , quindi il problema sta proprio nel caricamento del form.
  • Re: Cambio di form

    ors ha scritto:


    Ma il problema non è tanto cosa c'è nel load del form, perchè commentando tutto, il problema rimane.
    Essendo che il sistema operativo Windows applica delle animazioni alla chiusura e apertura dei Form, è normale che questi effetti di transizione facciano sì che per qualche istante, quando una finestra si chiude e l'altra si sta per aprire, si veda quello che c'è sotto o il desktop, proprio perché non sono operazioni eseguite in tempo nullo, ma con una animazione che seppur breve richiede un minimo quantitativo di tempo.

    Fossi in te adotterei un altro approccio, ad esempio sfrutterei gli User Control per utilizzare solo un Form, quello principale, e caricare dinamicamente al suo interno il controllo corrispondente alla videata che vuoi visualizzare, senza effetti di transizione e animazioni che possano dare fastidio.

    Ciao!
  • Re: Cambio di form

    "Ma serve solo per avere la lista dei form aperti nell'applicazione?"

    no, ti serve per recuperare ad esempio la tua istanza di form2 aperta ed applicargli la close
    ad es:
    
    Form2 formDaChiudere=(Form2)Application.OpenForms["Form2"] ;
    formDaChiudere.Close();
    
    e quindi dalla load del form3 potresti chiudere la form2
    esegui la close del form come prima istruzione dentro la load
  • Re: Cambio di form

    Ciao scusa, la mia non è una soluzione software ma solamente LOGICA... se ti da proprio fastidio questa frazione di secondo, metti un timer... fai lo show del form che vuoi, nel Load inserisci l'avvio del timer a 2 o 3 secondi vedi te, al termine dei quali parte il close del form...
    Ovviamente non sarà a livello software il top ma funziona sicuro...
    io almeno... quando non arrivo con la programmazione, mi butto sulla logica.... (dopo chiedo comunque )
  • Re: Cambio di form

    Grazie Mille a tutti delle vostre considerazioni e spiegazioni, siete stati molto chiari.
    Grazie Ancora
Devi accedere o registrarti per scrivere nel forum
10 risposte