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



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



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


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

632   5  

5 ответов:

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

Я модифицировал код Гэвина Стивенса, чтобы сделать его статичным, как это:

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.

Edit

Дальнейшее улучшение этого:

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

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

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

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

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");

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

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, "" )

Объект tooltip работает в нескольких элементах управления одновременно.

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

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

Comments

    Ничего не найдено.