Как удалить всплывающую подсказку, привязанную к элементу управления?

В настоящее время я добавляю всплывающую подсказку на ярлык:

ToolTip LabelToolTip = new System.Windows.Forms.ToolTip();
LabelToolTip.SetToolTip(this.LocationLabel, text);

Когда мне нужно изменить эту подсказку по мере изменения текста ярлыка, я попытаюсь сделать то же самое, чтобы добавить новую всплывающую подсказку. К сожалению, старая всплывающая подсказка остается под новой, что очень раздражает. Есть ли способ удалить старую всплывающую подсказку или мне нужно просто создать новый ярлык, когда я хочу изменить текст в ярлыке?

Ответ 1

Создайте один экземпляр ToolTip и используйте его, когда хотите показать его с помощью метода SetToolTip и используйте Hide, чтобы скрыть это. Как правило, нет необходимости создавать более одного экземпляра ToolTip.

Ответ 2

Я изменил код Gavin Stevens, чтобы сделать его статическим:

class ToolTipHelper
{
    private static readonly Dictionary<string, ToolTip> tooltips = new Dictionary<string, ToolTip>();

    public static ToolTip GetControlToolTip(string controlName)
    {
        <same as above>
    }
}

Теперь вам больше не нужно создавать экземпляр ToolTipHelper (следовательно, он не нуждается в конструкторе), и теперь вы можете получить доступ к нему из любого класса:

ToolTip tt = ToolTipHelper.GetControlToolTip("button1");
tt.SetToolTip(button1, "This is my button1 tooltip");

Также полезно использовать обе версии, чтобы включить и выключить подсказку, вы можете просто установить tt.Active true или false.

изменить

Далее улучшилось следующее:

class ToolTipHelper
{
    private static readonly Dictionary<string, ToolTip> tooltips = new Dictionary<string, ToolTip>();
    public static ToolTip GetControlToolTip(string controlName)
    {
        <same as above still>
    }
    public static ToolTip GetControlToolTip(Control control)
    {
        return GetControlToolTip(control.Name);
    }
    public static void SetToolTip(Control control, string text)
    {
        ToolTip tt = GetControlToolTip(control);
        tt.SetToolTip(control, text);
    }
}

Итак, теперь установка ToolTip из любой точки программы - это всего лишь одна строка:

ToolTipHelper.SetToolTip(button1, "This is my button1 tooltip");

Если вам не нужен доступ к старым функциям, вы можете объединить их и/или сделать их частными, поэтому SetToolTip() - это единственный, который вы когда-либо использовали.

Ответ 3

public class ToolTipHelper
{
    private readonly Dictionary<string, ToolTip> tooltips;

    /// <summary>
    /// Constructor
    /// </summary>
    public ToolTipHelper()
    {
        this.tooltips = new Dictionary<string, ToolTip>();
    }

    /// <summary>
    /// Key a tooltip by its control name
    /// </summary>
    /// <param name="controlName"></param>
    /// <returns></returns>
    public ToolTip GetControlToolTip(string controlName)
    {
        if (tooltips.ContainsKey(controlName))
        {
            return tooltips[controlName];
        }
        else
        {
            ToolTip tt = new ToolTip();
            tooltips.Add(controlName, tt);
            return tt;
        }
    }
}

Использование:

var tt = toolTips.GetControlToolTip("button1");
tt.SetToolTip(button1, "This is my button1 tooltip");
tt = toolTips.GetControlToolTip("button2");
tt.SetToolTip(button2, "This is my button2 tooltip");

Ответ 4

Чтобы просто удалить всплывающую подсказку из элемента управления, вы можете изменить класс следующим образом:

public static void SetToolTip( Control control, string text )
    {
        if ( String.IsNullOrEmpty( text ) )
        {
            if ( tooltips.ContainsKey(control.Name ) )
            {
                GetControlToolTip( control ).RemoveAll();
                tooltips.Remove( control.Name );
            }
        }
        else
        {
            ToolTip tt = GetControlToolTip( control );
            tt.SetToolTip( control, text );
        }
    }

и используйте эту команду:

ToolTipHelper.SetToolTip( control, "" )

Ответ 5

Объект всплывающей подсказки работает одновременно в нескольких элементах управления.

Создайте один экземпляр ToolTip и используйте его для добавления и удаления всплывающей подсказки любого элемента управления.

При добавлении вы должны просто использовать   .SetToolTip (Control, "Сообщение, которое будет отображаться при наведении" )   При удалении вы просто возвращаете значение null с помощью .SetToolTip (Control, null).