none
[VB 2010] Rendere un form inattivo RRS feed

  • Domanda

  • Salve a tutti, ho il bisogno di rendere un Form inattivo in modo che non risponda ai comandi. Ho provato con

    Enabled = False

    ma l'effetto è che in primo luogo va tutto bene ma quando finisce il ciclo While all'inizio del quale ho impostato questa proprietà e reimposto questa su

    True

    se per esempio mentre il suddetto ciclo premo ALT+F4 o anche solo clicco con il cursore sulla X alla fine di sempre questo suddetto ciclo il Form si chiude, ma questo vale per ogni altro pulsante del Form che all'inizio non viene attivato ma alla fine il codice corrispondente viene eseguito.

    Forse la soluzione potrebbe essere nella proprietà Cursor: io l'ho impostata su

    Cursors.WaitCursor
    ma anche se il cursore prende la forma di clessidra anche se il Form è abilitato riesce ad attivare lo stesso i vari controlli.

    giovedì 2 maggio 2013 20:23

Risposte

  • Da quello che si intuisce (ma ti assicuro che ci vuole molta
    intuiione), il tuo obiettivo e' quello di evitare che l'utente possa
    chiudere la finestra mentre stai eseguendo una certa elaborazione.
    Per fare questo puoi utilizzae l'evento FormClosing della for.
    L'evento viene richiamato ogni volta che la form si sta per chiudere e
    nell'argomento dello stesso hai a disposizione la proprieta' Cancel che
    ti permette di "abortire" l'operazione di chiusura.
    Utilizza una variabile della form di tipo boolean che imposti a true
    prima del tuo ciclo. Nel formClosing, imposti il cancel con il valore
    della variabile. Alla fine del ciclo riporti la variabile a false.
     
    --
    Massimo Bonanni
    Microsoft MVP VB.NET
    Microsoft MCP
     
    • Proposto come risposta Carmelo La Monica sabato 4 maggio 2013 09:19
    • Contrassegnato come risposta Irina Turcu mercoledì 31 luglio 2013 15:34
    venerdì 3 maggio 2013 12:52
    Moderatore

Tutte le risposte

  • Ciao frenci2012,

    Salve a tutti, ho il bisogno di rendere un Form inattivo in modo che non risponda ai comandi. Ho provato con

    Enabled = False

    ma l'effetto è che in primo luogo va tutto bene ma quando finisce il ciclo While all'inizio del quale ho impostato questa proprietà e reimposto questa su

    True

    se per esempio mentre il suddetto ciclo premo ALT+F4 o anche solo clicco con il cursore sulla X alla fine di sempre questo suddetto ciclo il Form si chiude, ma questo vale per ogni altro pulsante del Form che all'inizio non viene attivato ma alla fine il codice corrispondente viene eseguito.

    Forse la soluzione potrebbe essere nella proprietà Cursor: io l'ho impostata su

    Cursors.WaitCursor
    ma anche se il cursore prende la forma di clessidra anche se il Form è abilitato riesce ad attivare lo stesso i vari controlli.

    non ho ben chiaro il tuo intento , vuoi renderlo inattivo per la durata del ciclo While e riattivarlo subito dopo o renderlo inattivo permanente ?

    Ciao.


    giovedì 2 maggio 2013 21:04
  • frenci, scusa ma non si capisce nulla di quello che ti serve e che vuoi fare.

    Prova a spiegarti un po' meglio.

    Per il discorso Cursor.WaitCursor, agire su questa proprieta' cambia solo la forma del cursore, per il resto funziona come sempre.

    venerdì 3 maggio 2013 12:04
  • Da quello che si intuisce (ma ti assicuro che ci vuole molta
    intuiione), il tuo obiettivo e' quello di evitare che l'utente possa
    chiudere la finestra mentre stai eseguendo una certa elaborazione.
    Per fare questo puoi utilizzae l'evento FormClosing della for.
    L'evento viene richiamato ogni volta che la form si sta per chiudere e
    nell'argomento dello stesso hai a disposizione la proprieta' Cancel che
    ti permette di "abortire" l'operazione di chiusura.
    Utilizza una variabile della form di tipo boolean che imposti a true
    prima del tuo ciclo. Nel formClosing, imposti il cancel con il valore
    della variabile. Alla fine del ciclo riporti la variabile a false.
     
    --
    Massimo Bonanni
    Microsoft MVP VB.NET
    Microsoft MCP
     
    • Proposto come risposta Carmelo La Monica sabato 4 maggio 2013 09:19
    • Contrassegnato come risposta Irina Turcu mercoledì 31 luglio 2013 15:34
    venerdì 3 maggio 2013 12:52
    Moderatore
  • Ciao frenci2012,

    altro modo , sicuramente meno elegante di quanto proposto da Massimo ma funzionale , e modificare in ciclo foreach la proprietà FormBorderStyle su none e disabilita puoi tutti icontrolli del Form , quindi prendendo questo esempio:

        Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            For Each Control As Control In Controls
                Control.Enabled = False
            Next
    
            For index = 0 To 10000
                Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None
            Next
    
            For Each Control As Control In Controls
                Control.Enabled = True
            Next
    
            Me.FormBorderStyle = Windows.Forms.FormBorderStyle.FixedSingle
        End Sub


     Si esegue il ciclo For (in questo esempio) , disabiliti i controlli  , la barra del titolo del Form e ripristini poi il tutto a ciclo terminato.

    Ciao.


    venerdì 3 maggio 2013 20:23
  • In questo modo, secondo me, pero' non evita l'ALT+F4 che continua a
    funzionare inesorabilmente.
    Se l'utente fa ALT+F4 durante il ciclo, l'applicazione si chiude.
     
    --
    Massimo Bonanni
    Microsoft MVP VB.NET
    Microsoft MCP
     
    sabato 4 maggio 2013 08:01
    Moderatore
  • Massimo, l'ultima cosa che hai detto è stata quella più giusta, infatti è una parte del mio problema. Scusate se mi sono spiegato male, durante un ciclo While il form è inattivo, ma se durante questo interagisco con esso in qualsiasi modo (con la X, con ALT+F4, azionando un altro controllo...) alla fine di codesto ciclo l'evento associato si verifica (per la X la chiusura del Form, così come per ALT+F4, per l'altro controllo si avvia l'evento associato...). Come faccio a fare in modo che questo non succeda?

    domenica 5 maggio 2013 09:20
  • Frenci, perdonami, ma hai letto le risposte al thread?
    Hai provato ad implementare cio' che ti ho suggerito un paio di
    risposte fa?
    Cioe' hai provato a gestire l'evento Closing della form in modo da
    impostare la proprieta' Cancel dell'argomento del suddetto evento a
    true quando non vuoi che la form si chiuda?
    Se non l'hai fatto prova.
     
    --
    Massimo Bonanni
    Microsoft MVP VB.NET
    Microsoft MCP
     
    domenica 5 maggio 2013 15:53
    Moderatore