X-Received: by 10.36.29.81 with SMTP id 78mr1018147itj.5.1500467359656; Wed, 19 Jul 2017 05:29:19 -0700 (PDT) X-Received: by 10.31.148.67 with SMTP id w64mr5496vkd.3.1500467359590; Wed, 19 Jul 2017 05:29:19 -0700 (PDT) Path: csiph.com!weretis.net!feeder6.news.weretis.net!news.glorb.com!t6no532800itb.0!news-out.google.com!i9ni10546qti.0!nntp.google.com!14no391840qtn.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: it.comp.lang.visual-basic Date: Wed, 19 Jul 2017 05:29:19 -0700 (PDT) In-Reply-To: Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=81.88.228.153; posting-account=eitZdgoAAAC6C9CXmyhLNaQM3MgI3eZM NNTP-Posting-Host: 81.88.228.153 References: User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: Subject: Re: Scavalcare un evento vb.net From: Luca D Injection-Date: Wed, 19 Jul 2017 12:29:19 +0000 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Xref: csiph.com it.comp.lang.visual-basic:19098 Per interrompere l'innesco di un evento devi sganciarlo dalla/e funzione/i = che fino ad ora lo hanno consumato. Quando chiamo RemoveHandler, devi passare quindi l'indirizzo del delegato g= iusto; nel tuo codice stai passando 'btnAggiorna_Click' che non centra null= a, non =C3=A8 il delegato di quell'evento... la funzione che ti interessa = =C3=A8 'Home_FormClosing' Quindi, o rendi qulla sub pubblica, in modo che tu possa referenziarla nel = codice della seconda maschera, oppure (pi=C3=B9 pulito) crei nella prima ma= schera un metodo pubblico 'SpegniWarning' o come ti pare, dove inserisce i = remove handler del caso Esempio 'Maschera1 Public Sub SpegniWarning() RemoveHandler Me.FormClosing, AddressOf Home_FormClosing=20 End Sub 'Maschera2 Private Sub btnAggiorna_Click (...) Handles btnAggiorna.Click Home.SpegniWarning Application.Close() End Sub Nota che tutta questa cosa pu=C3=B2 diventare superflua se sfrutti il param= etro 'e' di FormClosing, che trovi descritto su https://msdn.microsoft.com/it-it/library/system.windows.forms.formclosingev= entargs(v=3Dvs.110).aspx Private Sub Home_FormClosing(sender As Object, e As FormClosingEventArgs) H= andles Me.FormClosing If e.CloseReason =3D CloseReason.UserClosing Then If (MessageBox.Show("Sto per chiudere l'applicazione!" & vbNewLine & vbNe= wLine _ & "Confermi?", " CHIUSURA APPLICAZIONE", MessageBoxButtons.YesNo= , MessageBoxIcon.Warning) =3D Windows.Forms.DialogResult.No) Then e.Cancel =3D True MessageBox.Show("Chiusura applicazione interrotta...", "CHIUSURA APPLICA= ZIONE", MessageBoxButtons.OK, MessageBoxIcon.Information) Else End If End If End Sub La IF che vedi all'inizio fa si che il messaggio venga mostrato se l'utente= prova a chiudere manualmente con il classico tasto X, ma non se invece la = chiusura =C3=A8 pilotata via codice in qualche altro modo, come ad esempio = la tua seconda maschera