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