我有一个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();
}
正如我所说 - 这有效,但它正在泄漏。
有人有任何建议吗?
答案 0 :(得分:22)
每次都不要创建新的工具提示。使用可视化设计器向表单添加工具提示,就像对任何其他控件或组件一样。每次在表单的工具提示上调用toolTip.SetToolTip(...)
。处理表格时将处理工具提示。
答案 1 :(得分:4)
是的,您不需要每次都创建一个新的工具提示,单个工具提示会这样做。如果您不知道自己需要多少工具提示,则没有问题,因为如果只有一个工具提示说toolTip1
,那么每次要更改ToolTip标题并控制某些事件时,您都可以使用以下工具提示。 每个表单只需要一个ToolTip实例。
toolTip1.SetToolTip(Current_pictureBox, "<tool tip string>");
答案 2 :(得分:0)
每个表单只需要一个ToolTip实例。
toolTip.SetToolTip(control, caption)
-可以与许多控件一起使用,可以为每个控件设置标题
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;
}