none
Gestione schermate multiple in un Form RRS feed

  • Domanda

  • Salve,
    volevo chiedere come ritenete sia meglio gestire un'applicazione form che richiede più schermate.
    Dunque, l'applicazione dovrà girare a pieno schermo, quindi senza barre ne menù o altro, avrà una schermata iniziale (piena tra label e button) e, all'avvenire di un evento, vorrei sospendere quella schermata e visualizzarne un'altra nuova per poi tornarvi all'uscita di quest'ultima.
    Grazie!!
    martedì 15 ottobre 2013 14:12

Risposte

  • Personalmente trovo che la cosa sia decisamente soggettiva (perlomeno se parliamo di "meglio" o "peggio"). Diciamo che, in linea generale, per "sospendere" un Form e non poterlo raggiungere fintanto che i suoi discendenti sono attivi, puoi lanciare dalla prima videata dei Form modali (utilizzando il metodo ShowDialog() anziché Show()).

    A questo indirizzo troverai della documentazione su questa tipologia di avvio: http://msdn.microsoft.com/it-it/library/aa984358(v=vs.71).aspx

    In linea generale, la sequenza modale è meno flessibile di quella standard, dove l'utente può navigare liberamente tra i forms dell'applicazione. Nel caso dei form modali, se un form ne lancia un successivo mediante il metodo ShowDialog, il primo non potrà subire modifiche se non si chiude prima quello derivato.

     


    Emiliano Musso

    • Proposto come risposta PierluigiM martedì 15 ottobre 2013 15:59
    • Contrassegnato come risposta Irina Turcu venerdì 29 novembre 2013 14:55
    martedì 15 ottobre 2013 14:33
  • Ti consiglierei un paio di modifiche: prima dell'avvio del tuo formFuoriServizio ne imposterei la proprietà TopMost su True (per spostarlo in primo piano).

    Quindi:

    formFuoriServizio.labelErroreRiga1.Text = "NO CONN E2C"; formFuoriServizio.labelErroreRiga2.Text = ""; formFuoriServizio.labelErroreRiga3.Text = ""; formFuoriServizio.labelErroreRiga4.Text = "";

    formFuoriServizio.TopMost = True; formFuoriServizio.Show();

    In seconda battuta, il ciclo While di controllo su flagConnE2C non lascia spazio al processing dei messaggi del sistema operativo, impedendo di eseguire operazioni di gestione della GUI, per esempio. Nel tuo caso, questo potrebbe tradursi nell'impossibilità di vedere il tuo form.

    Quindi, al termine del ciclo While, aggiungerei un Application.DoEvents() per far sì che la coda dei messaggi venga smaltita, ed il programma esegua effettivamente ciò che ha ancora in sospeso (visualizzazione della tua form inclusa).

    while (!flagConnE2C) { //INSERT "FUORI SERVIZIO: E2C non connesso //INSERT Visualizza Schermata errore Diagnostica("ERROR;CONN_E2C#"); Thread.Sleep(tempoAttesaConnE2C);

    Application.DoEvents(); }

    Spero questo ti aiuti.


    Emiliano Musso

    • Proposto come risposta Irina Turcu giovedì 31 ottobre 2013 15:46
    • Contrassegnato come risposta Irina Turcu venerdì 29 novembre 2013 14:55
    mercoledì 16 ottobre 2013 12:18
  • se il primo form lo richiamo all'inizio del formLoad del form principale non va se poi metto in attesa di connessione il form principale


    Il form di avvio sarà lo "Splash Form". Il form Applicazione sarà un secondo form.

    Ecco un esempio in cui ho simulato il tempo della connessionione con un timer:


    Public Class Form1 ' Impostare la proprietà del progetto "shutdown mode" a "When last form closes"


    Dim myapp As New Form2 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Text = "splash" BackColor = Color.White Timer1.Interval = 1000 Timer1.Enabled = True ' **** simula inizio connessione ****

    End Sub


    ' **** simula l'evento di connessione avvenuta **** Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

    Timer1.Enabled = False myapp.Show() Me.Close()

    End Sub End Class



    • Proposto come risposta Irina Turcu giovedì 31 ottobre 2013 15:45
    • Contrassegnato come risposta Irina Turcu venerdì 29 novembre 2013 14:55
    giovedì 17 ottobre 2013 14:16
  • Si posso fare in questo modo, ma non c'è un modo semplice per gestire schermate multiple in un applicazione form, mi sembra tanto strano

    C'è il Tab control. I form Mdi. In generale, puoi disabilitare o nascondere tutto quello che non vuoi sia accessibile fintanto che la connessione non sia avvenuta.

    • Proposto come risposta Irina Turcu giovedì 31 ottobre 2013 15:45
    • Contrassegnato come risposta Irina Turcu venerdì 29 novembre 2013 14:55
    venerdì 18 ottobre 2013 13:02

  • il tab control non mi permette di nascondere i titoli delle schede, l'mdi l'avevo provato ma c'era comuqnue qualcosa che non andava che non ricordo

    Usa un Panel, ci metti dentro i controlli che ti servono e lo rendi inizialmente invisibile. A connessione (non bloccante) avvenuta lo rendi visibile.

    • Proposto come risposta Irina Turcu giovedì 31 ottobre 2013 15:45
    • Contrassegnato come risposta Irina Turcu venerdì 29 novembre 2013 14:55
    venerdì 18 ottobre 2013 14:45

Tutte le risposte

  • Personalmente trovo che la cosa sia decisamente soggettiva (perlomeno se parliamo di "meglio" o "peggio"). Diciamo che, in linea generale, per "sospendere" un Form e non poterlo raggiungere fintanto che i suoi discendenti sono attivi, puoi lanciare dalla prima videata dei Form modali (utilizzando il metodo ShowDialog() anziché Show()).

    A questo indirizzo troverai della documentazione su questa tipologia di avvio: http://msdn.microsoft.com/it-it/library/aa984358(v=vs.71).aspx

    In linea generale, la sequenza modale è meno flessibile di quella standard, dove l'utente può navigare liberamente tra i forms dell'applicazione. Nel caso dei form modali, se un form ne lancia un successivo mediante il metodo ShowDialog, il primo non potrà subire modifiche se non si chiude prima quello derivato.

     


    Emiliano Musso

    • Proposto come risposta PierluigiM martedì 15 ottobre 2013 15:59
    • Contrassegnato come risposta Irina Turcu venerdì 29 novembre 2013 14:55
    martedì 15 ottobre 2013 14:33
  • Ho provato con i form modali e, modificando alcune gestioni, potrebbe anche andare ma... la cosa si complica.

    Ho il mio form principale in cui all'inizio deve effettuare una connessione tcp con scambio continuo di messaggi, ho inserito il codice della connessione in un backgroundworker con un while(true) che controlla l'arrivo di messaggi. Se la connessione non c'è o va in errore ho messo nel workcompleted di aspettare un certo tempo e riavviare il backgroundwork in modo da ristabilire la connessione.

    Nel mio form principale ho inserire un while che, finchè non è avviata la connessione tcp (uso un flag che viene settato al momento della connessione), mi apra un form con l'avviso di fuori servizio per mancanza di connessione. Il problema è che il form non me lo apre, mettendo i punti d'interruzione sul form.show non si ferma come se non ci passa per niente.

    Questa è la parte di codice nel form_load

    //connessione con e2c
                backgroundWorkerE2C.RunWorkerAsync();
    
                formFuoriServizio.labelErroreRiga1.Text = "NO CONN E2C";
                formFuoriServizio.labelErroreRiga2.Text = "";
                formFuoriServizio.labelErroreRiga3.Text = "";
                formFuoriServizio.labelErroreRiga4.Text = "";
                formFuoriServizio.Show();
    
                //controllo connessione E2C
                while (!flagConnE2C)
                {
                    //INSERT "FUORI SERVIZIO: E2C non connesso
                    //INSERT Visualizza Schermata errore
    
    
                    Diagnostica("ERROR;CONN_E2C#");
                    Thread.Sleep(tempoAttesaConnE2C);
                }
    
                formFuoriServizio.Close();

    Questo è il codice nel dowork

    try
    {
                    flagConnE2C = false;
    
                    // Establish the remote endpoint for the socket.
                    IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ipE2C), portE2C);
    
                    // Create a TCP/IP socket.
                    clientE2C = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
                    clientE2C.Connect(remoteEP);
    
                    //while (!clientE2C.Connected)
                    //{
                    //    flagConnE2C = false;
                    //    Thread.Sleep(tempoAttesaConnE2C);
                    //}
    
                    Diagnostica("EVENT;CONN_E2C;" + clientE2C.RemoteEndPoint.ToString() + "#");
                    flagConnE2C = true;
                    while (true)
                    {
                        ...
                    }
     }
    catch (Exception ex)
    {
          Diagnostica("ERROR;CONN_E2C;" + ex.ToString() + "#");
          //flagConnE2C = false;
    }
    
    

    e questo del workcompleted

    private void backgroundWorkerE2C_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                flagConnE2C = false;
    
                Thread.Sleep(tempoAttesaConnE2C);
                //Application.DoEvents();
                if (!backgroundWorkerE2C.IsBusy)
                    backgroundWorkerE2C.RunWorkerAsync();
            }

    mercoledì 16 ottobre 2013 10:16
  • Ho provato con i form modali e, modificando alcune gestioni, potrebbe anche andare ma... la cosa si complica.

    Ho il mio form principale in cui all'inizio deve effettuare una connessione tcp con scambio continuo di messaggi, ho inserito il codice della connessione in un backgroundworker con un while(true) che controlla l'arrivo di messaggi. Se la connessione non c'è o va in errore ho messo nel workcompleted di aspettare un certo tempo e riavviare il backgroundwork in modo da ristabilire la connessione.

    Nel mio form principale ho inserire un while che, finchè non è avviata la connessione tcp (uso un flag che viene settato al momento della connessione), mi apra un form con l'avviso di fuori servizio per mancanza di connessione. Il problema è che il form non me lo apre, mettendo i punti d'interruzione sul form.show non si ferma come se non ci passa per niente.

    Questa è la parte di codice nel form_load

    //connessione con e2c
                backgroundWorkerE2C.RunWorkerAsync();
    
                formFuoriServizio.labelErroreRiga1.Text = "NO CONN E2C";
                formFuoriServizio.labelErroreRiga2.Text = "";
                formFuoriServizio.labelErroreRiga3.Text = "";
                formFuoriServizio.labelErroreRiga4.Text = "";
                formFuoriServizio.Show();
    
                //controllo connessione E2C
                while (!flagConnE2C)
                {
                    //INSERT "FUORI SERVIZIO: E2C non connesso
                    //INSERT Visualizza Schermata errore
    
    
                    Diagnostica("ERROR;CONN_E2C#");
                    Thread.Sleep(tempoAttesaConnE2C);
                }
    
                formFuoriServizio.Close();

    Questo è il codice nel dowork

    try
    {
                    flagConnE2C = false;
    
                    // Establish the remote endpoint for the socket.
                    IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(ipE2C), portE2C);
    
                    // Create a TCP/IP socket.
                    clientE2C = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    
                    clientE2C.Connect(remoteEP);
    
                    //while (!clientE2C.Connected)
                    //{
                    //    flagConnE2C = false;
                    //    Thread.Sleep(tempoAttesaConnE2C);
                    //}
    
                    Diagnostica("EVENT;CONN_E2C;" + clientE2C.RemoteEndPoint.ToString() + "#");
                    flagConnE2C = true;
                    while (true)
                    {
                        ...
                    }
     }
    catch (Exception ex)
    {
          Diagnostica("ERROR;CONN_E2C;" + ex.ToString() + "#");
          //flagConnE2C = false;
    }
    

    e questo del workcompleted

    private void backgroundWorkerE2C_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                flagConnE2C = false;
    
                Thread.Sleep(tempoAttesaConnE2C);
                //Application.DoEvents();
                if (!backgroundWorkerE2C.IsBusy)
                    backgroundWorkerE2C.RunWorkerAsync();
            }

    Perchè non usi BeginConnect del socket, piuttosto che usare un thread ?

    mercoledì 16 ottobre 2013 10:46
  • Ti consiglierei un paio di modifiche: prima dell'avvio del tuo formFuoriServizio ne imposterei la proprietà TopMost su True (per spostarlo in primo piano).

    Quindi:

    formFuoriServizio.labelErroreRiga1.Text = "NO CONN E2C"; formFuoriServizio.labelErroreRiga2.Text = ""; formFuoriServizio.labelErroreRiga3.Text = ""; formFuoriServizio.labelErroreRiga4.Text = "";

    formFuoriServizio.TopMost = True; formFuoriServizio.Show();

    In seconda battuta, il ciclo While di controllo su flagConnE2C non lascia spazio al processing dei messaggi del sistema operativo, impedendo di eseguire operazioni di gestione della GUI, per esempio. Nel tuo caso, questo potrebbe tradursi nell'impossibilità di vedere il tuo form.

    Quindi, al termine del ciclo While, aggiungerei un Application.DoEvents() per far sì che la coda dei messaggi venga smaltita, ed il programma esegua effettivamente ciò che ha ancora in sospeso (visualizzazione della tua form inclusa).

    while (!flagConnE2C) { //INSERT "FUORI SERVIZIO: E2C non connesso //INSERT Visualizza Schermata errore Diagnostica("ERROR;CONN_E2C#"); Thread.Sleep(tempoAttesaConnE2C);

    Application.DoEvents(); }

    Spero questo ti aiuti.


    Emiliano Musso

    • Proposto come risposta Irina Turcu giovedì 31 ottobre 2013 15:46
    • Contrassegnato come risposta Irina Turcu venerdì 29 novembre 2013 14:55
    mercoledì 16 ottobre 2013 12:18
  • Ti consiglierei un paio di modifiche: prima dell'avvio del tuo formFuoriServizio ne imposterei la proprietà TopMost su True (per spostarlo in primo piano).

    Quindi:

    formFuoriServizio.labelErroreRiga1.Text = "NO CONN E2C"; formFuoriServizio.labelErroreRiga2.Text = ""; formFuoriServizio.labelErroreRiga3.Text = ""; formFuoriServizio.labelErroreRiga4.Text = "";

    formFuoriServizio.TopMost = True; formFuoriServizio.Show();

    In seconda battuta, il ciclo While di controllo su flagConnE2C non lascia spazio al processing dei messaggi del sistema operativo, impedendo di eseguire operazioni di gestione della GUI, per esempio. Nel tuo caso, questo potrebbe tradursi nell'impossibilità di vedere il tuo form.

    Quindi, al termine del ciclo While, aggiungerei un Application.DoEvents() per far sì che la coda dei messaggi venga smaltita, ed il programma esegua effettivamente ciò che ha ancora in sospeso (visualizzazione della tua form inclusa).

    while (!flagConnE2C) { //INSERT "FUORI SERVIZIO: E2C non connesso //INSERT Visualizza Schermata errore Diagnostica("ERROR;CONN_E2C#"); Thread.Sleep(tempoAttesaConnE2C);

    Application.DoEvents(); }

    Spero questo ti aiuti.


    Emiliano Musso

    TopMost l'avevo impostato e ho provato con Application.DoEvent() non va.

    Ho scoperto che comunque è quel while di controllo che blocca tutto, forse perchè si trova nel formLoad? non so, nel frattempo sto cercando soluzioni alternative alla gestione ma vorrei risolverlo perchè non penso sia una cosa impensabile di fermare l'esecuzione con un messaggio finchèattendo la connessione

    mercoledì 16 ottobre 2013 14:30
  • Ho scoperto che comunque è quel while di controllo che blocca tutto, forse perchè si trova nel formLoad?
    Perchè bloccare con il while tutto il form, nell'attesa che "Connect" termini, quando "BeginConnect" non blocca e notifica dell'avvenuta connessione chiamando un metodo (callback) opportunamente definito nel form ?
    mercoledì 16 ottobre 2013 15:15
  • a me serve di bloccare l'applicazione finchè non ho la connessione avvenuta e visualizzare un form con il messaggio di fuori servizio
    giovedì 17 ottobre 2013 10:12
  • a me serve di bloccare l'applicazione finchè non ho la connessione avvenuta e visualizzare un form con il messaggio di fuori servizio

    Fai comparire un primo form, tipo splash screen, che scrive il messaggio "Connecting...", quando, dopo il BeginConnect, la connessione sarà avvenuta, aprirai il form applicazione (quello che invece vorresti bloccare) e chiuderai lo spash form.

    Splash Form: Sub Load --> begin connect

    Splash Form: Sub Connected --> apri form applicazione, chiudi Splash Form

    giovedì 17 ottobre 2013 11:32
  • a me serve di bloccare l'applicazione finchè non ho la connessione avvenuta e visualizzare un form con il messaggio di fuori servizio

    Fai comparire un primo form, tipo splash screen, che scrive il messaggio "Connecting...", quando, dopo il BeginConnect, la connessione sarà avvenuta, aprirai il form applicazione (quello che invece vorresti bloccare) e chiuderai lo spash form.

    Splash Form: Sub Load --> begin connect

    Splash Form: Sub Connected --> apri form applicazione, chiudi Splash Form


    se il primo form lo richiamo all'inizio del formLoad del form principale non va se poi metto in attesa di connessione il form principale
    giovedì 17 ottobre 2013 13:24
  • se il primo form lo richiamo all'inizio del formLoad del form principale non va se poi metto in attesa di connessione il form principale


    Il form di avvio sarà lo "Splash Form". Il form Applicazione sarà un secondo form.

    Ecco un esempio in cui ho simulato il tempo della connessionione con un timer:


    Public Class Form1 ' Impostare la proprietà del progetto "shutdown mode" a "When last form closes"


    Dim myapp As New Form2 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Text = "splash" BackColor = Color.White Timer1.Interval = 1000 Timer1.Enabled = True ' **** simula inizio connessione ****

    End Sub


    ' **** simula l'evento di connessione avvenuta **** Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

    Timer1.Enabled = False myapp.Show() Me.Close()

    End Sub End Class



    • Proposto come risposta Irina Turcu giovedì 31 ottobre 2013 15:45
    • Contrassegnato come risposta Irina Turcu venerdì 29 novembre 2013 14:55
    giovedì 17 ottobre 2013 14:16
  • se il primo form lo richiamo all'inizio del formLoad del form principale non va se poi metto in attesa di connessione il form principale


    Il form di avvio sarà lo "Splash Form". Il form Applicazione sarà un secondo form.

    Ecco un esempio in cui ho simulato il tempo della connessionione con un timer:


    Public Class Form1 ' Impostare la proprietà del progetto "shutdown mode" a "When last form closes"


    Dim myapp As New Form2 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Text = "splash" BackColor = Color.White Timer1.Interval = 1000 Timer1.Enabled = True ' **** simula inizio connessione ****

    End Sub


    ' **** simula l'evento di connessione avvenuta **** Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

    Timer1.Enabled = False myapp.Show() Me.Close()

    End Sub End Class




    Si posso fare in questo modo, ma non c'è un modo semplice per gestire schermate multiple in un applicazione form, mi sembra tanto strano
    venerdì 18 ottobre 2013 12:31
  • Si posso fare in questo modo, ma non c'è un modo semplice per gestire schermate multiple in un applicazione form, mi sembra tanto strano

    C'è il Tab control. I form Mdi. In generale, puoi disabilitare o nascondere tutto quello che non vuoi sia accessibile fintanto che la connessione non sia avvenuta.

    • Proposto come risposta Irina Turcu giovedì 31 ottobre 2013 15:45
    • Contrassegnato come risposta Irina Turcu venerdì 29 novembre 2013 14:55
    venerdì 18 ottobre 2013 13:02
  • Si posso fare in questo modo, ma non c'è un modo semplice per gestire schermate multiple in un applicazione form, mi sembra tanto strano

    C'è il Tab control. I form Mdi. In generale, puoi disabilitare o nascondere tutto quello che non vuoi sia accessibile fintanto che la connessione non sia avvenuta.


    il tab control non mi permette di nascondere i titoli delle schede, l'mdi l'avevo provato ma c'era comuqnue qualcosa che non andava che non ricordo
    venerdì 18 ottobre 2013 14:21

  • il tab control non mi permette di nascondere i titoli delle schede, l'mdi l'avevo provato ma c'era comuqnue qualcosa che non andava che non ricordo

    Usa un Panel, ci metti dentro i controlli che ti servono e lo rendi inizialmente invisibile. A connessione (non bloccante) avvenuta lo rendi visibile.

    • Proposto come risposta Irina Turcu giovedì 31 ottobre 2013 15:45
    • Contrassegnato come risposta Irina Turcu venerdì 29 novembre 2013 14:55
    venerdì 18 ottobre 2013 14:45

  • il tab control non mi permette di nascondere i titoli delle schede, l'mdi l'avevo provato ma c'era comuqnue qualcosa che non andava che non ricordo

    Usa un Panel, ci metti dentro i controlli che ti servono e lo rendi inizialmente invisibile. A connessione (non bloccante) avvenuta lo rendi visibile.


    Il problema però è fare più panel sovrapposti in progettazione
    venerdì 18 ottobre 2013 15:29
  • Il problema però è fare più panel sovrapposti in progettazione

    Se vuoi progettare diversi form tramite designer, tornando all'esempio dello splash, cosa c'è di complicato nell'aprire un nuovo form con il metodo Show e chiudere l'attuale con il metodo Close?

    venerdì 18 ottobre 2013 16:07
  • Il problema però è fare più panel sovrapposti in progettazione

    Se vuoi progettare diversi form tramite designer, tornando all'esempio dello splash, cosa c'è di complicato nell'aprire un nuovo form con il metodo Show e chiudere l'attuale con il metodo Close?

    Ho rivisto tutta le gestione e adesso va, aveva problemi con il while dopo lo show del form. In pratica se facevo form2.show e poi mettevo un while per fermare il form generante finchè non si verificasse un certo evento, non veniva visualizzato il form2.

    Mi devo leggere qualcosa sulla generazione e gestione della visualizzazione dei form, anzi se avete da indicare qualcosa ben venga.

    lunedì 21 ottobre 2013 07:55
  • Il problema però è fare più panel sovrapposti in progettazione

    --------------------------------------------------

    Se vuoi progettare diversi form tramite designer, tornando all'esempio dello splash, cosa c'è di complicato nell'aprire un nuovo form con il metodo Show e chiudere l'attuale con il metodo Close?

    --------------------------------------------------

    Ho rivisto tutta le gestione e adesso va, aveva problemi con il while dopo lo show del form. In pratica se facevo form2.show e poi mettevo un while per fermare il form generante finchè non si verificasse un certo evento, non veniva visualizzato il form2.

    Mi devo leggere qualcosa sulla generazione e gestione della visualizzazione dei form, anzi se avete da indicare qualcosa ben venga.

    Windows ha un già un ciclo (Message Loop) in cui intercetta eventi (e messaggi) e, conseguentemente, esegue del codice. Se blocchi il programma con un tuo ciclo, blocchi il message loop e Windows non ha più la possibilità di esegurie il resto del codice che, ad esempio, disegna finestre e quant'altro.

    http://it.wikipedia.org/wiki/Programmazione_a_eventi

    lunedì 21 ottobre 2013 08:14
  • Il problema però è fare più panel sovrapposti in progettazione

    --------------------------------------------------

    Se vuoi progettare diversi form tramite designer, tornando all'esempio dello splash, cosa c'è di complicato nell'aprire un nuovo form con il metodo Show e chiudere l'attuale con il metodo Close?

    --------------------------------------------------

    Ho rivisto tutta le gestione e adesso va, aveva problemi con il while dopo lo show del form. In pratica se facevo form2.show e poi mettevo un while per fermare il form generante finchè non si verificasse un certo evento, non veniva visualizzato il form2.

    Mi devo leggere qualcosa sulla generazione e gestione della visualizzazione dei form, anzi se avete da indicare qualcosa ben venga.

    Windows ha un già un ciclo (Message Loop) in cui intercetta eventi (e messaggi) e, conseguentemente, esegue del codice. Se blocchi il programma con un tuo ciclo, blocchi il message loop e Windows non ha più la possibilità di esegurie il resto del codice che, ad esempio, disegna finestre e quant'altro.

    http://it.wikipedia.org/wiki/Programmazione_a_eventi


    Si questo lo conosco ma mi occorrerebbe approfondire bene come viene gestita.
    lunedì 21 ottobre 2013 15:34

  • Si questo lo conosco ma mi occorrerebbe approfondire bene come viene gestita.

    Dovresti studiarti la struttura di un'applicazione scritta per win32 (programmazione C/C++)

    http://msdn.microsoft.com/en-us/library/vstudio/bb384843.aspx

    Per saperne di più, c'è il libro di Charles Petzold, Programming Windows.

    A proposito, un altro modo per gestire più schermate progettate con il designer, può essere l'uso degli UserControl, anche se il loro scopo non è fare le veci del form.


    • Modificato BlueLed lunedì 21 ottobre 2013 21:47
    lunedì 21 ottobre 2013 21:45

  • Si questo lo conosco ma mi occorrerebbe approfondire bene come viene gestita.

    Dovresti studiarti la struttura di un'applicazione scritta per win32 (programmazione C/C++)

    http://msdn.microsoft.com/en-us/library/vstudio/bb384843.aspx

    Per saperne di più, c'è il libro di Charles Petzold, Programming Windows.

    A proposito, un altro modo per gestire più schermate progettate con il designer, può essere l'uso degli UserControl, anche se il loro scopo non è fare le veci del form.


    Gli UserControl potrebbe essere uan buona soluzione, sarebbe come gestire una form come un sito web cambiando pagina per pagina.

    Avevo fatto una cosa simile con un form e lo strumento WebBrowser aprendo di volta in volta le pagine che mi occorrevano. Solo che così mi occorreva anche il server web, in questo modo invece no.

    martedì 22 ottobre 2013 07:36