如何在WinForm应用程序的PictureBox中更改现有ToolTip控件的文本?

时间:2011-08-30 03:57:58

标签: c# .net winforms tooltip picturebox

我有一个winform应用程序,其动态编号(基于数据库值)为PictureBoxes。每个P-Box都有一个Tooltip控件。

如何在没有任何内存泄漏的情况下更改工具提示文本?现在,我有以下代码,但它的内存泄漏=>以前的ToolTip控件没有得到GC。

BTW,这是一个尝试更新主UI线程的后台线程....

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();
}

正如我所说 - 这有效,但它正在泄漏。

有人有任何建议吗?

3 个答案:

答案 0 :(得分:22)

每次都不要创建新的工具提示。使用可视化设计器向表单添加工具提示,就像对任何其他控件或组件一样。每次在表单的工具提示上调用toolTip.SetToolTip(...)。处理表格时将处理工具提示。

答案 1 :(得分:4)

是的,您不需要每次都创建一个新的工具提示,单个工具提示会这样做。如果您不知道自己需要多少工具提示,则没有问题,因为如果只有一个工具提示说toolTip1,那么每次要更改ToolTip标题并控制某些事件时,您都可以使用以下工具提示。 每个表单只需要一个ToolTip实例。

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

答案 2 :(得分:0)

  1.   

    每个表单只需要一个ToolTip实例。

  2. toolTip.SetToolTip(control, caption)-可以与许多控件一起使用,可以为每个控件设置标题

  3. toolTip.ToolTipTitle-设置工具提示标题,该标题是与工具提示绑定的所有控件的标题。

例如:

public Form1()
{
    InitializeComponent();
    toolTip1.SetToolTip(button1, "btn1");
    toolTip1.SetToolTip(button2, "btn2");
    toolTip1.SetToolTip(button3, "btn3");
}


private void button4_Click(object sender, EventArgs e)
{
    toolTip1.ToolTipTitle = textBox1.Text;
}

enter image description here