2011-11-22 25 views
5

'da Araç İpucu'nu temizleme nasıl otomatikleştirilir Bir bellek sızıntısı izliyorum ve onu bir UserControl türetilmiş sınıfında ayrılmış bir ToolTip için daraltdım. BöyleUserControl

araç ipucu denetimin yapıcısında ayrılan tahsis edilir ve Yük durumunda başlatıldı:

public class CommonProfile : System.Windows.Forms.UserControl 
{ 
    private ToolTip toolTip1; 

    ... 

    public CommonProfile() 
    { 
     InitializeComponent(); 

     // Create the ToolTip and associate with the Form container. 
     toolTip1 = new ToolTip(this.components); 
    } 

    private void CommonProfile_Load(object sender, System.EventArgs e) 
    { 
     // Set up the delays for the ToolTip. 
     toolTip1.AutoPopDelay = 5000; 
     toolTip1.InitialDelay = 1000; 
     toolTip1.ReshowDelay = 500; 
     // Force the ToolTip text to be displayed whether or not the form is active. 
     toolTip1.ShowAlways = true; 

     // Set up the ToolTip text 
     toolTip1.SetToolTip(this.btnDeleteEntry, "Delete this Profile"); 
     toolTip1.SetToolTip(this.lblProfileType, "Edit this Profile"); 
     toolTip1.SetToolTip(this.lblProfileData, "Edit this Profile"); 
     toolTip1.SetToolTip(this.picFlagForUpdate, "Toggle Flag for Update"); 
    }  
} 

denetimin üst denetimin ömrünü aşan bir yaşam süresi vardır. Bu kontrol anında oluşturulur ve panel kontrolüne eklenir ve daha sonra panel kontrolünden çıkarılır.

Araç İpucu'nun referansları kaldığı için, denetimin Dispose üyesine çağrı yapılmadığını anladım. Kapatma yöntemini çağırma

public void Shutdown() 
{ 
    toolTip1.RemoveAll(); 
} 

sızıntısı ortadan kaldırır ve bertaraf sonunda denir:

Böyle bir Kapatma yöntemi eklendi.

Ne yazık ki, bu çözüm, kontrolü kullanan kişiyi, tamamlandığında Kapatma yöntemini çağırmayı hatırlatır.

Bunu otomatik hale getirmenin bir yolu olup olmadığını bilmek istiyorum, böylece Kapatma yöntemini açıkça çağırmak gerekmeden gerçekleşir.

+0

Araç çubuğunda, kullanıcı denetimini elden çıkarırken ya da kapama yönteminiz gibi sizin için bunu yapan bir temizleme işlevine sahip olabileceğinizi sanırım. Burada – PRR

+0

1. Bak [http://stackoverflow.com/questions/672980/dispose-on-user-controls-really-meant-to-edit-the-designer-cs-file][1] [1]: http://stackoverflow.com/questions/672980/dispose-on-user-controls-really-meant-to-edit-the-designer-cs-file – VMykyt

cevap

3

UserControl ürününü nasıl temizlediğini gösteren kodu Panel sayfasından göstermiyorsunuz.

Sadece çağırarak:

panel1.Controls.Remove(userControl1); 

UserControl elden gitmiyor.

Sen özel olarak çağırmanız gerekir:

userControl1.Dispose(); 

da otomatik olarak Panel kaldıracağız hangi. senin UserControl tek yapmanız gerekiyorsa kendi o kendi imha olayı abone olmayı deneyin, temizlemek: Ayrıca

private ToolTip toolTip1; 

public UserControl1() { 
    InitializeComponent(); 
    // tooltip initialization 
    this.Disposed += UserControl1_Disposed; 
} 

private void UserControl1_Disposed(object sender, EventArgs e) { 
    if (toolTip1 != null) 
    toolTip1.Dispose(); 
} 
+0

Çalıştığınız için teşekkürler! – Avalanchis

1

açık bir şekilde araç ipucu üzerinde elden çağırmanız gerekir kontrol atmayın yönteminde.

İlgili konular