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

Pur*_*ome 17 .net c# tooltip picturebox winforms

我有一个winform应用程序,它具有动态数字(基于数据库值)PictureBoxes.每个P-Box都有一个Tooltip控件.

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

顺便说一句,这是一个尝试更新主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();
}
Run Code Online (Sandbox Code Playgroud)

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

有人有什么建议吗?

Han*_*ood 24

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

  • 你只需要一个.一个ToolTip组件可以提供数千个控件的提示.当你调用`toolTip.SetToolTip(Control,Text)`时,它会将控件和文本添加到内部集合中并处理控件的鼠标事件.将鼠标悬停在控件上时,ToolTip组件会查找关联的文本.要从此集合中删除条目,请调用`toolTip.SetToolTip(Control,null)` (10认同)

小智 5

是的,您不需要每次都创建一个新的工具提示,单个工具提示即可。如果您不知道想要多少个工具提示,也没有问题,因为如果只有一个工具提示toolTip1,那么每次您想要更改工具提示标题和对某个事件的控制时,您都可以使用以下命令。每个表单只需要一个 ToolTip 实例。

toolTip1.SetToolTip(Current_pictureBox, "<tool tip string>");
Run Code Online (Sandbox Code Playgroud)