|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
21-06-2009, 15.38.47 | #1 | |
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
[VB 6] Impedire la chiusura da evento UNLOAD
Quota:
|
|
22-06-2009, 10.46.30 | #2 | |
Junior Member
Registrato: 14-06-2009
Messaggi: 102
|
Prova così, dovrebbe andare...
Quota:
|
|
22-06-2009, 14.04.20 | #3 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Ti stai rispondendo da solo Jamester.
Quel Cancel as Integer nel Form_Unload non è li per caso. Può acquisire un valore, oppure ad esso può essere assegnato; Tra l'altro, il parametro è passato byreference, non byvalue: Ha un senso nel buon vecchio assembly. (ed in VB non fa eccezione) Aggiungo solo una cosa: L'Unload Me è inutile li dove lo hai messo, perchè l'evento Unload del form viene richiamato sicuramente da qualche altra parte nel tuo programma. |
22-06-2009, 20.54.18 | #4 | |
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
Quota:
Cmq il codice suggeritomi nn va uguale. se vado su uscita cn la X del form senza selezionare uno dei due checkbox, esce lo stesso |
|
22-06-2009, 23.25.04 | #5 |
Guest
Messaggi: n/a
|
Forse quello che intende LoryOne è cambiare il valore del parametro di ingresso passato come riferimento di Cancel ad un altro valore per prevnire la chiusura della from. Potrebbe andare, ma sinceramente non ci ho mai provato
IMHO, non lo devi mettere su Unload quel pezzo di codice, perché la funzione Unload indica solo le operazioni da fare PRIMA della chiusura, non la può annullare. Devi metterlo invece su Form_QueryUnload perciò toglierei da unload quel codice e metterei Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Select Case UnloadMode Case vbFormControlMenu 'cioè intende ha premuto X ... End Select End Sub e al posto dei ... ci metterei: If Settaggi.Check1.Value = 0 And Settaggi.Check2.Value = 0 Then Call MsgBox("Prima di uscire dalle opzioni, si prega di selezionare una delle due modalità di esecuzione del programma ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0") Exit Sub Else 'Call MsgBox("Bye ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0") End If End Sub (cioè come quello di Stizzo ma senza unloadMe che ci pensa lui alla fine) |
22-06-2009, 23.52.26 | #6 | |
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
Quota:
|
|
23-06-2009, 07.56.28 | #7 | |
Guest
Messaggi: n/a
|
Quota:
'Call MsgBox("Bye ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0") compare la Message box? (solo per sapere se entra effettivamente nel metodo associato all'evento) |
|
23-06-2009, 08.48.12 | #8 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Semi.genius ha capito: Cancel va impostato ad un valore diverso da 0.
Un po di teoria (quel tanto che basta): Ogni evento è gestito da una procedura di controllo sullo stato di quello che lo precede ed, all'interno di ogni procedura, si può essere in grado di intervenire sul normale susseguirsi degli eventi. Ogni parametro (strutture e variabili) dato in pasto alle funzioni Win32 è passato byreference, in modo che all'interno della funzione il valore del parametro possa essere ricavato, oppure ad esso possa essere assegnato un valore differente, in modo da ottenere esiti differenti. Passiamo ora ad uno pseudocodice dimostrativo dove ogni Subprocedure sia public: (Public) Sub[procedure] IncrementoByReference(ByRef I As Integer) I = I + 1 End Sub[procedure] (Public) Sub[procedure] IncrementoByValue(ByVal I As Integer) I = I + 1 Print I End Sub[procedure] (Public) Sub[procedure] Main() Dim I As Integer I=1 IncrementoByReference I Print I -> Ad I è assegnato il valore 2 all'interno di Main IncrementoByValue I -> Ad I è assegnato il valore 3 all'interno della subprocedure, poichè di I è stato effettuata una copia ed il suo valore è cambiato solo all'interno di IncrementoByValue Print I -> Ad I è ancora assegnato il valore 2 End Sub[procedure] Affinchè una form possa essere chiusa, VB fornisce 3 eventi in sequenza sui quali è possibile agire per porre un controllo sul flowing delle istruzioni che portano alla chiusura della form: Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Form_Unload(Cancel As Integer) Form_Terminate() Sia Cancel, sia UnloadMode sono due parametri passati byreference ad una subprocedure. Nell' intervento precedente "[VB 6] Scaricare il programma dalla ram", avevo posto l'attenzione sulla corretta sequenza con la quale tali eventi vengono richiamati in VB. |
23-06-2009, 09.44.26 | #9 | |
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
Quota:
|
|
23-06-2009, 09.45.48 | #10 | |
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
Quota:
|
|
23-06-2009, 10.24.34 | #11 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Codice originario:
Codice:
Private Sub Form_Unload(Cancel As Integer) If Settaggi.Check1.Value = 0 And Settaggi.Check2.Value = 0 Then Call MsgBox("Prima di uscire dalle opzioni, si prega di selezionare una delle due modalità di esecuzione del programma ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0") Else 'Call MsgBox("Bye ", vbOKOnly + vbCritical + vbApplicationModal + vbDefaultButton1, "Baldios's ToolKit 1.0") Unload Me End If End Sub Codice scomposto: Codice:
Private Sub Form_Unload(Cancel As Integer) If CondizioneVerificata Then -> Apertura Blocco verifica Codice eseguito in caso di esito positivo Else Codice eseguito in caso di esito negativo End If -> Chiusura blocco di verifica End Sub CondizioneVerificata=Settaggi.Check1.Value = 0 And Settaggi.Check2.Value = 0 A=0 And B=0: La condizione verificata è vera solo se entrambe le due checkbox non sono selezionate (proprietà .Value=0) In caso contrario, si salta al blocco che segue l' Else che termina il blocco eseguito in condizione verificata ed apre il blocco da eseguire in caso contrario. Ragiona un attimo: Tu vuoi che la form non si chiuda nel caso in cui almeno una delle due checkbox non sia pari a 0. Il codice che il computer eseguirà in quel caso, sarà quello che segue l'else, in quanto la condizione che tu hai specificato non sarà veritiera in quel caso... |
23-06-2009, 10.37.10 | #12 |
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
No la form non si deve chiudere se i valori check1 e check2 sono ENTRAMBI 0. Se uno qualsiasi dei due e' 1 allora si puo' chiudere e salvare magari l'impostazione corrente
|
23-06-2009, 10.42.15 | #13 | |
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
Secondo il mio ragionamento:
Quota:
Secondo come ho letto, nn devo metterla in ULOAD ma in QueryUnload in quanto su UNLOAD cmq e' ovvio che la chiude comunque. Pero' anche se l'ho messa in QueryUnload il risultato non cambia. Per la mia logica dovrebbe funzionare per questo nn capisco :anger: |
|
23-06-2009, 10.48.29 | #14 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Verifica se si verifica la condizione.
Quanto valgono i due .Value ? Qual'è il risultato della messa in And ? (Tabella della verità) |
23-06-2009, 11.29.26 | #15 | |
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
Quota:
|
|
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
crash e avvio icone desktop lento ? | ropa | Windows 7/Vista/XP/ 2003 | 2 | 21-12-2007 22.05.17 |
errori eventi: Asw8ttwdffp + Syrforv0tnu | bnvale01 | Windows 7/Vista/XP/ 2003 | 13 | 18-09-2007 15.53.55 |
Aiutoo! La partizione Documenti fa i capricci! | BlackSkull | Windows 7/Vista/XP/ 2003 | 38 | 12-06-2007 14.01.19 |
[XP] errori al avvio del sistema | LiNk91 | Windows 7/Vista/XP/ 2003 | 3 | 30-03-2007 22.17.01 |
Aiuto: attacco hacker sul mio pc? | Shambler | Sicurezza&Privacy | 16 | 08-06-2005 01.13.52 |