Подтвердить что ты не робот

Как изменить текст существующего элемента управления ToolTip в PictureBox в приложении WinForm?

У меня есть приложение winform, которое имеет динамическое число (на основе значения базы данных) PictureBoxes. Каждый P-Box имеет элемент управления Tooltip.

Как изменить текст подсказки без каких-либо утечек памяти? Прямо сейчас у меня есть следующий код, но он пропускает память = > предыдущие элементы ToolTip не получают GC'd.

Кстати, это фоновый поток, который пытается обновить основной поток пользовательского интерфейса....

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

Как я уже сказал - это работает, но оно протекает.

У кого-нибудь есть предложения?

4b9b3361

Ответ 1

Не создавайте новую подсказку каждый раз. Добавьте ToolTip в форму с помощью визуального дизайнера, как и для любого другого элемента управления или компонента. Вызовите toolTip.SetToolTip(...) на подсказке инструмента формы каждый раз. Всплывающая подсказка будет удалена, когда форма будет расположена.

Ответ 2

Да, вам не нужно создавать новую подсказку каждый раз, как это делает один инструмент ToolTip. Нет проблем, если вы не знаете, сколько подсказок вы хотите, потому что, если есть только одна подсказка, toolTip1, вы можете использовать следующее каждый раз, когда хотите изменить заголовок и элемент управления ToolTip для какого-либо события. Вам нужен только один экземпляр ToolTip для каждой формы.

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