Principale utente con più risposte
[VB 2010] Rendere un form inattivo

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.
Risposte
-
Da quello che si intuisce (ma ti assicuro che ci vuole moltaintuiione), il tuo obiettivo e' quello di evitare che l'utente possachiudere 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 enell'argomento dello stesso hai a disposizione la proprieta' Cancel cheti permette di "abortire" l'operazione di chiusura.Utilizza una variabile della form di tipo boolean che imposti a trueprima del tuo ciclo. Nel formClosing, imposti il cancel con il valoredella variabile. Alla fine del ciclo riporti la variabile a false.--Massimo BonanniMicrosoft MVP VB.NETMicrosoft MCP
- Proposto come risposta Carmelo La Monica sabato 4 maggio 2013 09:19
- Contrassegnato come risposta Irina Turcu mercoledì 31 luglio 2013 15:34
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.
- Carmelo La Monica
- Visual Basic Tips e Tricks Blog
- WordPress.com Blog
- Blogger
- CrystalwebDotNetGroup
-
-
Da quello che si intuisce (ma ti assicuro che ci vuole moltaintuiione), il tuo obiettivo e' quello di evitare che l'utente possachiudere 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 enell'argomento dello stesso hai a disposizione la proprieta' Cancel cheti permette di "abortire" l'operazione di chiusura.Utilizza una variabile della form di tipo boolean che imposti a trueprima del tuo ciclo. Nel formClosing, imposti il cancel con il valoredella variabile. Alla fine del ciclo riporti la variabile a false.--Massimo BonanniMicrosoft MVP VB.NETMicrosoft MCP
- Proposto come risposta Carmelo La Monica sabato 4 maggio 2013 09:19
- Contrassegnato come risposta Irina Turcu mercoledì 31 luglio 2013 15:34
-
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.
- Carmelo La Monica
- Visual Basic Tips e Tricks Blog
- WordPress.com Blog
- Blogger
- CrystalwebDotNetGroup
-
-
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?
-
Frenci, perdonami, ma hai letto le risposte al thread?Hai provato ad implementare cio' che ti ho suggerito un paio dirisposte fa?Cioe' hai provato a gestire l'evento Closing della form in modo daimpostare la proprieta' Cancel dell'argomento del suddetto evento atrue quando non vuoi che la form si chiuda?Se non l'hai fatto prova.--Massimo BonanniMicrosoft MVP VB.NETMicrosoft MCP