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

У меня есть приложение 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();
}

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

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

Ответы [ 3 ]

23 голосов
/ 30 августа 2011

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

4 голосов
/ 30 августа 2011

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

toolTip1.SetToolTip(Current_pictureBox, "<tool tip string>");
0 голосов
/ 16 ноября 2018
  1. Для каждой формы требуется только один экземпляр всплывающей подсказки.

  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

...