Dove si annullerà l'iscrizione agli eventi in un UserControl
? L'ho sottoscritto nell'evento Load
, come ho fatto nei moduli. E nei moduli di solito annullerei l'iscrizione nell'evento Closing
, ma non riesco a trovare nulla di simile nello UserControl
...Dove annullare l'iscrizione di eventi in un WinForms UserControl
risposta
È necessario annullare l'iscrizione a tutti? Un riferimento al controllo utente viene mantenuto dopo che è stato scaricato? In caso contrario, non è necessario preoccuparsi dei gestori di eventi perché, non appena il controllo utente viene rimosso dalla memoria, lo sono anche i gestori di eventi. Non perdi i riferimenti in questo modo.
Come altri hanno già detto è davvero necessario annullare l'iscrizione nel proprio scenario?
Se si ha realmente bisogno di annullare l'iscrizione tuttavia si fanno esattamente il contrario di sottoscrizione:
UserControl1.Click -= new EventHandler(UserControl1_Click);
Ma dove lo farei? – Svish
Ci sono momenti in cui si vorrebbe fare questo (ad esempio, quando si utilizza CAB).
Per completezza, la risposta alla tua domanda è:
protected override void OnCreateControl()
{
base.OnCreateControl();
if(!DesignMode) //only time this.ParentForm should be null
this.ParentForm.FormClosing += ParentForm_FormClosing;
}
private void ParentForm_FormClosing(object sender, FormClosingEventArgs e)
{
//Unregister events here
}
Si potrebbe anche ignorare Dispose()
Il problema che questo controllo non ha riferimento né alla forma padre o genitore. –
- 1. Control vs UserControl in WinForms?
- 2. Winforms controlla gli eventi personalizzati
- 3. Dove accedere DataContext in XAML WinRT UserControl
- 4. WinForms: disabilita temporaneamente un gestore di eventi
- 5. Come esporre l'intero controllo secondario di usercontrol su winforms designer
- 6. esporre ed aumentare caso di un controllo figlio in un UserControl in C#
- 7. Come rendere WinForms UserControl riempire le dimensioni del suo contenitore
- 8. In che modo un UserControl WPF eredita un UserControl WPF?
- 9. Stampa di un form/UserControl in C#
- 10. InotifyPropertyChanged in UserControl
- 11. Come annullare la registrazione e registrare un gestore eventi attendibile?
- 12. Utilizzo di BindingSource in un UserControl
- 13. Come ereditare un UserControl da un altro UserControl?
- 14. Devo annullare l'iscrizione a tutti i gestori di eventi?
- 15. È sbagliato non annullare la registrazione dei gestori di eventi?
- 16. Come utilizzare un ContextMenu UserControl in WPF?
- 17. Dove trovare l'elenco dei tipi di eventi?
- 18. Dove vengono memorizzati gli eventi di WordPress?
- 19. Dove inserisco ascoltatori e gestori di eventi?
- 20. Aggiungi finestra WPF in un progetto Winforms in VS 2010
- 21. UserControl equivalente in MVC3?
- 22. inserire Usercontrol in FlowLayoutPanel
- 23. LoadControl, UserControl in WebMethod
- 24. Carica UserControl in TabItem
- 25. Associazione dati a un UserControl in WPF
- 26. Chiamare un metodo di un UserControl in MVVM
- 27. WPF - Binding ObservableCollection proprietà di dipendenza all'interno di un UserControl
- 28. Eventi instradati personalizzati WPF - Come annullare la sottoscrizione?
- 29. Rendering software di un Web UserControl
- 30. Invoke di un UserControl non funziona
Quindi, se UserControl è l'ascolto di qualcosa, e UserControl esce dallo scope, quindi il gestore di eventi scompare e l'UserControl sarà raccolto come dovrebbe Mentre se qualcosa va fuori dal campo di applicazione, non verrà raccolto finché UserControl non annulla la sottoscrizione o esce dall'ambito stesso. Ho capito bene? – Svish
@Svish: No. Se UserControl sta ascoltando Something e UserControl esce dall'ambito, UserControl verrà ** non ** raccolto, poiché Something detiene ancora un riferimento a UserControl. I Qualcosa va fuori dal campo di applicazione e UserControl non contiene alcun riferimento ad esso. Qualcosa verrà raccolto. – dtb
Quindi, in altre parole, se qualcosa esisterà dopo che l'UserControl è morto, dovrò annullare l'iscrizione per l'UserControl da raccogliere? – Svish