2009-04-11 14 views
7

Quando l'utente fa clic su una determinata parte di una finestra, aggiungo un UserControl ai controlli della finestra. UserControl ha un pulsante di chiusura. Cosa posso fare nel gestore del pulsante UserControl per distruggere UserControl? Sembra non esserci. Analog analogico alla chiamata DestroyWindow Win32 e non esiste alcun metodo Close() per un controllo. Finora ho questo:Come può un UserControl distruggere se stesso?

private void sbClose_Click(object sender, EventArgs e) 
{ 
    Parent.Controls.Remove(this); 
    this.Dispose(); 
} 

E, nel caso in cui il genitore ha bisogno di distruggere il controllo, quali sono i passi? Questo è quello che ho finora:

Controls.Remove(control); 
    control.Dispose(); 

risposta

6

si lavora in un ambiente di codice gestito con la raccolta dei rifiuti - non c'è nulla di si può fare per forza il controllo utente per essere distrutto.

Tutto quello che devi fare, tutto ciò che può fare do è rimuoverlo dal genitore e assicurarsi che non ci siano riferimenti rimanenti.

Questa sarà generalmente sufficiente:

private void sbClose_Click(object sender, EventArgs e) 
{ 
    Parent.Controls.Remove(this); 
} 

L'unica volta che avrete bisogno di più è se si legare insieme le cose con gli eventi, come è necessario annullare la registrazione quelli pure.

+0

Non solo controllo/gestione correlata. Oggetti che si distruggono? divertimento! –

0

Un controllo non può distruggere se stesso. In termini di avere un genitore farlo, sei sulla strada giusta. Puoi avere il genitore o un'altra chiamata di controllo Disponi su di esso e rimuovere tutti i riferimenti a questo controllo. Il dereferenziamento del controllo in questo modo consentirà al GC di ripulire le cose.

Problemi correlati