Как удалить всплывающую подсказку, привязанную к элементу управления?
В данный момент я добавляю подсказку к метке примерно так:
ToolTip LabelToolTip = new System.Windows.Forms.ToolTip();
LabelToolTip.SetToolTip(this.LocationLabel, text);
Когда мне нужно изменить эту подсказку по мере изменения текста метки, я пытаюсь сделать то же самое, чтобы добавить новую подсказку. К сожалению, старая подсказка остается под Новой, что очень раздражает. Есть ли способ удалить старую подсказку, или я должен просто сделать новую метку, когда я хочу изменить текст в метке?
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.Activetrue или 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