2011-08-30 12 views
13

PictureBoxes numaralı bir dinamik numaraya (veritabanı değerine göre) sahip bir winform uygulamasına sahibim. Her P-Box bir Tooltip kontrolüne sahiptir.Varolan bir ToolTip denetiminin metnini WinForm uygulamamdaki PictureBox'ta nasıl değiştirebilirim?

Herhangi bir bellek sızıntısı olmadan Araç İpucu Metnini nasıl değiştirebilirim? Şu anda, aşağıdaki kod var, ama sızdıran bellek => önceki ToolTip denetimleri GC'd almıyor.

BTW, bu ana UI iş parçacığı güncelleştirmek için çalışan bir arka plan iş parçacığı ....

if (pictureBox == null || !pictureBox.IsHandleCreated) { 
    continue; 
} 

Action setTooltipAndImage =() => { 
    var toolTip = new ToolTip(); 
    GameServer tempGameFile = gameServer; 
    toolTip.SetToolTip(pictureBox, string.Format(...)); 
    pictureBox.Image = Resources.RedButton; 
}; 

if (pictureBox.InvokeRequired) {       
    pictureBox.Invoke(setTooltipAndImage); 
} else { 
    setTooltipAndImage(); 
} 

Dediğim gibi - bu işleri ama sızdırıyor.

Herhangi bir öneriniz var mı?

+0

hmm .. neden downvote? dürüst bir soru gibi görünüyor? –

+0

+1, sıfıra geri döndüğünüzde, tamamen kabul edilebilir bir soru gibi görünüyor. BTW: ToolTip bellek sızıntısını görmek için hangi araçları kullanıyorsunuz? –

+0

ANTS Memory Profiler kullanıyorum. İşte ben ekran görüntüleri ile sordum benzer bir soru: http://stackoverflow.com/questions/7225959/how-can-i-debug-this-stackoverflowexception-in-my-winform-application –

cevap

19

Her seferinde yeni bir Araç İpucu oluşturmayın. Diğer bir denetim veya bileşen için yaptığınız gibi görsel tasarımcıyı kullanarak forma bir Araç İpucu ekleyin. Her seferinde formun ipucu üzerinde toolTip.SetToolTip(...) numaralı telefonu arayın. ToolTip, Form verildiğinde bertaraf edilecektir.

+0

Onunla sorun Ben kaç tane ihtiyacım olduğunu biliyorum. Bazı dinamik verilere dayanıyor. Bu yüzden onları dinamik olarak yapmalıyım. –

+7

Sadece birine ihtiyacınız var. Bir ToolTip bileşeni binlerce kontrol için ipuçları sağlayabilir. 'ToolTip.SetToolTip (Control, Text)' adını verdiğinizde, kontrol ve metni dahili bir koleksiyona ekler ve kontrolün fare olaylarını idare eder. Bir denetimin üzerine geldiğinizde, ToolTip bileşeni ilişkili metni arar. Bu koleksiyondan bir girişi kaldırmak için, 'toolTip.SetToolTip (Control, null)' –

+0

W00t 'yi arayın - hile gibi görünüyor :) iyi görünüyor ... –

2

Evet, her defasında tek bir ToolTipwill'in yeni bir ToolTip oluşturmasına gerek yoktur. Kaç tane ToolTips istediğinizi bilmiyorsanız sorun yoktur, çünkü eğer sadece bir ToolTip varsa toolTip1 varsa, ToolTip altyazısını değiştirmek ve bazı olayları kontrol etmek istediğinizde aşağıdakileri kullanabilirsiniz. Form başına yalnızca bir ToolTip örneğine gereksinim duyarsınız.

toolTip1.SetToolTip(Current_pictureBox, "<tool tip string>"); 
İlgili konular