Wie füge ich einem Steuerelement einen ToolTip hinzu?

154

Ich habe einige Steuerelemente, für die ich ein anzeigen möchte, ToolTipwenn die Maus darüber bewegt wird. Wie kann ich das machen? Ich würde gerne wissen, wie man das richtig im Code macht, aber auch im Designer (Es gibt eine ToolTipKomponente in der Toolbox, aber ich verstehe sie nicht ganz).

Es würde mich nicht wundern, wenn dies ein Duplikat ist, aber ich kann nur Fragen finden, die sich auf fortgeschrittenere, spezifischere Szenarien beziehen. Ich würde gerne die Grundlagen kennen.

Svish
quelle
Verwandte und ältere noch (gilt für .NET im Allgemeinen): stackoverflow.com/questions/168550/…
Christopher Kyle Horton

Antworten:

208

Hier ist Ihr Artikel dazu mit Code

private void Form1_Load(object sender, System.EventArgs e)
{
     // Create the ToolTip and associate with the Form container.
     ToolTip toolTip1 = new ToolTip();

     // Set up the delays for the ToolTip.
     toolTip1.AutoPopDelay = 5000;
     toolTip1.InitialDelay = 1000;
     toolTip1.ReshowDelay = 500;
     // Force the ToolTip text to be displayed whether or not the form is active.
     toolTip1.ShowAlways = true;

     // Set up the ToolTip text for the Button and Checkbox.
     toolTip1.SetToolTip(this.button1, "My button1");
     toolTip1.SetToolTip(this.checkBox1, "My checkBox1");
}
Svetlozar Angelov
quelle
3
Ich denke also, es spielt keine Rolle, ob die toolTip1Variable aus dem Gültigkeitsbereich fällt?
Svish
1
Was ist mit einer Statik ToolTipfür alle Ihre Formulare?
Svish
7
Es würde freigegeben werden, sobald es nicht mehr referenziert wurde, was es nicht sein würde, da der Knopf und das Kontrollkästchen immer noch darauf verweisen würden
Rowland Shaw
2
Sie verweisen darauf, weil "SetToolTip" EventHandler zu den Ereignissen der Schaltfläche und des Kontrollkästchens hinzufügt
Eduardo Wada
3
Ich denke, es ist eine schlechte Idee, den Tooltip in eine statische Variable zu setzen. Was ist, wenn ein Formular geschlossen und wieder geöffnet wird? Funktioniert der SetTooltip wieder? Und wenn ja, bleiben die Handler des geschlossenen Formulars im Speicher oder werden sie korrekt entfernt? Ich würde nicht einmal eine Minute damit verbringen, das zu testen. Verwenden Sie stattdessen eine Mitgliedsvariable - das ist kugelsicher!
Elmue
138

Ziehen Sie ein Tooltip-Steuerelement aus der Toolbox auf Ihr Formular. Sie müssen ihm keine anderen Eigenschaften als einen Namen geben. Suchen Sie dann in den Eigenschaften des Steuerelements, für das Sie einen Tooltip verwenden möchten, nach einer neuen Eigenschaft mit dem Namen des soeben hinzugefügten Tooltip-Steuerelements. Standardmäßig erhalten Sie einen Tooltip, wenn sich der Cursor über dem Steuerelement befindet.

JYelton
quelle
54
Stellen Sie sicher, dass Sie dabei (wie um 2 Uhr morgens) ein ToolTip-Steuerelement und kein ToolStrip-Steuerelement verwenden.
Adrian K
2
Mit dieser Antwort erhalten alle Steuerelemente in der Form durch Hinzufügen eines einzigen Tooltips zur Winform einen eigenen Tooltip.
SAm
Leistungsstark in seiner Einfachheit, stellen Sie einfach sicher, dass Sie es auf die richtige Steuerung und nicht auf die daneben legen (wie um 2 Uhr morgens).
Michael Stimson
40
  1. Fügen Sie Ihrem Formular eine ToolTip-Komponente hinzu
  2. Wählen Sie eines der Steuerelemente aus, für die Sie einen Tooltip wünschen
  3. Öffnen Sie das Eigenschaftsraster ( F4). In der Liste finden Sie eine Eigenschaft namens "ToolTip on toolTip1" (oder ähnliches). Legen Sie den gewünschten QuickInfo-Text für diese Eigenschaft fest.
  4. Wiederholen Sie 2-3 für die anderen Steuerelemente
  5. Getan.

Der Trick dabei ist, dass das ToolTip-Steuerelement ein Extender-Steuerelement ist. Dies bedeutet, dass es die Eigenschaften für andere Steuerelemente im Formular erweitert. Hinter den Kulissen wird dies erreicht, indem Code wie in Svetlozars Antwort generiert wird. Es gibt andere Steuerelemente, die auf die gleiche Weise arbeiten (z. B. das HelpProvider).

Fredrik Mörk
quelle
1
Sie können also denselben ToolTip für viele Steuerelemente mit unterschiedlichen Texten verwenden?
Svish
@Svish: Ja, das ist der Zweck von Extender-Steuerelementen.
Fredrik Mörk
Kann es auch benutzerübergreifend und formularübergreifend verwendet werden? Zum Beispiel, wenn Sie eine statische QuickInfo mit Ihren Standardeigenschaftswerten erstellt haben. Oder wäre das eine schlechte Praxis?
Svish
Ich habe es nie ausprobiert und kenne das Innenleben von ToolTip nicht genau, aber da es einen Verweis auf das Steuerelement enthält, auf das sich ein Text bezieht, könnte es funktionieren. Nur ein Weg, es herauszufinden; probieren Sie es aus: o)
Fredrik Mörk
Nun, ich werde es natürlich ausprobieren. Aber ich bin nicht besonders gut darin, Dinge wie Speicherlecks und dergleichen zu finden ... Und wenn es einen Speicherverlust oder ähnliches verursachen würde, würde ich gerne wissen, hehe.
Svish
8

ToolTip in C # ist sehr einfach zu fast allen UI-Steuerelementen hinzuzufügen. Sie müssen hierfür kein MouseHover-Ereignis hinzufügen.

So geht's

  1. Fügen Sie Ihrem Formular ein ToolTip-Objekt hinzu. Ein Objekt reicht für das gesamte Formular. ToolTip toolTip = new ToolTip();

  2. Fügen Sie das Steuerelement mit dem gewünschten Text zur QuickInfo hinzu.

    toolTip.SetToolTip(Button1,"Click here");

OopsDev
quelle
1

Ich habe es folgendermaßen gemacht: Fügen Sie das Ereignis einfach einem Steuerelement hinzu, legen Sie das Tag des Steuerelements fest und fügen Sie eine Bedingung hinzu, um den Tooltip für das entsprechende Steuerelement / Tag zu verarbeiten.

private void Info_MouseHover(object sender, EventArgs e)
{
    Control senderObject = sender as Control;
    string hoveredControl = senderObject.Tag.ToString();

    // only instantiate a tooltip if the control's tag contains data
    if (hoveredControl != "")
    {
        ToolTip info = new ToolTip
        {
            AutomaticDelay = 500
        };

        string tooltipMessage = string.Empty;

        // add all conditionals here to modify message based on the tag 
        // of the hovered control
        if (hoveredControl == "save button")
        {
            tooltipMessage = "This button will save stuff.";
        }

        info.SetToolTip(senderObject, tooltipMessage);
    }
}
Blockhaus
quelle
-3

Abonnieren Sie einfach das ToolTipTextNeeded-Ereignis des Steuerelements und geben Sie e.TooltipText zurück, viel einfacher.

fredv
quelle
6
Ich denke nicht, dass dies ein Standard-WinForm-Steuerungsereignis ist.
Dan7