2009-07-22 7 views
12

Ich füge noch ein Tooltip zu einem Label wie so:Wie entferne ich einen Tooltip, der aktuell an ein Steuerelement gebunden ist?

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

Wenn ich brauche diese Tooltip als die Textänderungen des Labels zu ändern, ich versuche, das gleiche zu tun einen neuen Tooltip hinzuzufügen. Leider bleibt der alte Tooltip unter dem neuen, was wirklich nervt. Gibt es eine Methode, um den alten Tooltip zu entfernen, oder sollte ich nur ein neues Label erstellen, wenn ich den Text in einem Label ändern möchte?

Antwort

15

Erstellen Sie eine einzelne Instanz des ToolTip und verwenden Sie sie, wenn Sie sie mit der Methode SetToolTip anzeigen möchten, und verwenden Sie die Methode Hide, um sie auszublenden. Im Allgemeinen ist es nicht notwendig, mehr als eine ToolTip Instanz zu erstellen.

+2

Ah, so sollte ich nur noch eine Instanz der Klasse Variable stattdessen ein Quick-Info-Objekt zu halten, und es wieder verwenden, wenn es geändert werden muss. Vielen Dank. – benmatth

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

Verbrauch:

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

I Gavin Stevens Code geändert, um es wie so alle statischen zu machen:

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

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

Jetzt nicht mehr Sie ToolTipHelper instanziiert müssen (daher hat es keine Notwendigkeit für Konstruktor), und so können Sie jetzt auf diese von jeder Klasse wie folgt zugreifen:

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

In beiden Versionen kann auch eine QuickInfo ein- und ausgeschaltet werden, Sie können einfach tt.Active true oder false setzen.

bearbeiten

Weitere dazu verbessert:

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

So, jetzt ist es, eine Quick-Info von überall in der Programmeinstellung nur eine Zeile:

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

Wenn Sie don‘ Sie brauchen Zugang zu den alten Funktionen, Sie könnten sie kombinieren und/oder sie privat machen, so dass die SetToolTip() die einzige ist, die Sie uns jemals geben würden e.

+0

Ich vermute, Gavin Stevens verdient Anerkennung, aber ich liebe die statische Lösung. Ohne zu sehr ins Detail zu gehen, hatte ich ein sehr kompliziertes Formular mit 100en Steuerelementen, denen bei jeder Formularübergabe Tooltips zugewiesen wurden, sodass Sie die alten nicht löschen konnten. Diese Lösung hat mich vor beträchtlichen Kopfschmerzen bewahrt. – 333Matt

+0

Ja, statisch ist besser! –

3

einfach, um den Tooltip von der Steuerung zu entfernen, können Sie die Klasse wie folgt ändern könnte:

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

und verwenden Sie diesen Befehl:

ToolTipHelper.SetToolTip(control, "") 
0

Der Tooltip Objekt arbeitet in mehreren Kontrollen am gleichen Zeit.

Erstellen Sie eine einzelne Instanz der QuickInfo und verwenden Sie sie zum Hinzufügen und Entfernen einer QuickInfo eines beliebigen Controls.

Beim Hinzufügen Sie einfach .SetToolTip (Control "Nachricht, die apear, wenn Hover") verwenden sollten Beim Entfernen Sie es einfach auf null zurück mit .SetToolTip (Control, null).

+0

Wenn Sie eine Quelle zitieren, sollten Sie diese Quelle in Ihrem Beitrag angeben. – LarsTech

Verwandte Themen