Zeigen Sie mit Windows Forms einen Tooltip über eine Schaltfläche an

Antworten:

222

Die QuickInfo ist eigentlich ein WinForms-Steuerelement, mit dem QuickInfos für mehrere Elemente in einem einzigen Formular angezeigt werden.

Angenommen, Ihre Schaltfläche heißt MyButton.

  1. Fügen Sie Ihrem Formular ein ToolTip-Steuerelement (unter Allgemeine Steuerelemente in der Windows Forms-Toolbox) hinzu.
  2. Geben Sie ihm einen Namen - sagen Sie MyToolTip
  3. Setzen Sie die Eigenschaft "Tooltip on MyToolTip" von MyButton (unter "Verschiedenes im Eigenschaftenraster der Schaltfläche") auf den Text, der angezeigt werden soll, wenn Sie den Mauszeiger darüber halten.

Der Tooltip wird automatisch angezeigt, wenn sich der Cursor über der Schaltfläche befindet. Wenn Sie ihn jedoch programmgesteuert anzeigen müssen, rufen Sie ihn auf

MyToolTip.Show("Tooltip text goes here", MyButton)

in Ihrem Code, um den Tooltip anzuzeigen, und MyToolTip.Hide (MyButton), damit er wieder verschwindet.

Dylan Beattie
quelle
Schön, aber eine Frage: Wenn ich mehr als eine Schaltfläche in einem Formular habe, benötige ich mehr Tooltip oder kann ich mehrere Beschreibungen und Schaltflächen für denselben Tooltip festlegen?
Ghiboz
8
Ihr Formular benötigt nur ein einziges ToolTip-Steuerelement - jede Schaltfläche kann einen anderen Hilfetext haben (aus diesem Grund ist der "Tooltip auf MyToolTip" eine Eigenschaft des zugehörigen Steuerelements, nicht des ToolTip-Steuerelements selbst)
Dylan Beattie
2
Im einfachsten Fall ist es am besten, den Tooltip zum Formular hinzuzufügen. Problem: Zum Entwurfszeitpunkt eines benutzerdefinierten Steuerelements haben Sie keinen Verweis auf das übergeordnete Formular. Lösung: Erstellen Sie ein Tooltip-Objekt im Steuerelement. Stellen Sie sich das ToolTip-Objekt nicht als unbedingt an das Formular angehängt vor.
Stéphane Gourichon
93

Verwenden des Formular-Designers:

  • Ziehen Sie das ToolTip-Steuerelement aus der Toolbox auf das Formular.
  • Wählen Sie die Eigenschaften des Steuerelements aus, auf dem die QuickInfo angezeigt werden soll.
  • Suchen Sie die Eigenschaft 'ToolTip on toolTip1' (der Name lautet möglicherweise nicht toolTip1, wenn Sie den Standardnamen geändert haben).
  • Stellen Sie den Text der Eigenschaft auf den QuickInfo-Text ein, den Sie anzeigen möchten.

Sie können den Tooltip auch programmgesteuert mit dem folgenden Aufruf einstellen:

this.toolTip1.SetToolTip(this.targetControl, "My Tool Tip");
jmatthias
quelle
45

Sie können die ToolTip-Klasse verwenden:

Erstellen einer QuickInfo für ein Steuerelement

Beispiel:

private void Form1_Load(object sender, System.EventArgs e)
{
    System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
    ToolTip1.SetToolTip(this.Button1, "Hello");
}
DaveK
quelle
1
Dies ist die perfekte Lösung, da sie direkt in den automatisch generierten VS-Code integriert wird. Danke :)
anon58192932
@ DaveK Danke. Ist auf diese Weise besser, weil ich alle Tooltips an einem Ort definieren kann
fedeteka
Vielen Dank. Die beste und einfachste Antwort auf diese Frage.
Najeeb
Noch kürzer:new ToolTip().SetToolTip(this.Button1, "Hello");
The_Black_Smurf
6

Für den Standard-Tooltip kann dies verwendet werden -

System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip(this.textBox1, "Hello world");

Ein angepasster Tooltip kann auch verwendet werden, wenn für Tooltip-Nachrichten eine Formatierung erforderlich ist. Dies kann durch benutzerdefiniertes Formatieren des Formulars erstellt und als QuickInfo-Dialogfeld für das Maus-Hover-Ereignis des Steuerelements verwendet werden. Bitte überprüfen Sie den folgenden Link für weitere Details -

http://newapputil.blogspot.in/2015/08/create-custom-tooltip-dialog-from-form.html

nvivekgoyal
quelle
5

Fauler und kompakter Speichern von Text in der Tag- Eigenschaft

Wenn Sie etwas faul sind und die Tag- Eigenschaft der Steuerelemente für nichts anderes verwenden, können Sie damit den Tooltip-Text speichern und allen Steuerelementen auf einmal MouseHover- Ereignishandler zuweisen :

    private System.Windows.Forms.ToolTip ToolTip1;
    private void PrepareTooltips()
    {
        ToolTip1 = new System.Windows.Forms.ToolTip();
        foreach(Control ctrl in this.Controls)
        {
            if (ctrl is Button && ctrl.Tag is string)
            {
                ctrl.MouseHover += new EventHandler(delegate(Object o, EventArgs a)
                {
                    var btn = (Control)o;
                    ToolTip1.SetToolTip(btn, btn.Tag.ToString());
                });
            }
        }
    }

In diesem Fall wird allen Schaltflächen mit einer Zeichenfolge in der Tag- Eigenschaft ein MouseHover- Ereignis zugewiesen . Um es kompakt zu halten, wird das MouseHover- Ereignis mithilfe eines Lambda-Ausdrucks inline definiert. Für den Fall, dass bei einer schwebenden Schaltfläche der Tag- Text dem Tooltip zugewiesen und angezeigt wird.

Flodis
quelle
4

Das .NET Framework bietet eine ToolTip-Klasse. Fügen Sie eine davon zu Ihrem Formular hinzu und führen Sie dann im MouseHover-Ereignis für jedes Element, für das Sie einen Tooltip wünschen, Folgendes aus:

    private void checkBox1_MouseHover(object sender, EventArgs e)
    {
        toolTip1.Show("text", checkBox1);
    }
Timothy Carter
quelle
4
private void Form1_Load(object sender, System.EventArgs e)
{
    ToolTip toolTip1 = new ToolTip();
    toolTip1.AutoPopDelay = 5000;
    toolTip1.InitialDelay = 1000;
    toolTip1.ReshowDelay = 500;
    toolTip1.ShowAlways = true;
    toolTip1.SetToolTip(this.button1, "My button1");
    toolTip1.SetToolTip(this.checkBox1, "My checkBox1");
}
akn
quelle
4
Während dieses Code-Snippet die Frage lösen kann, hilft das Hinzufügen einer Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
Secelite
0

Basierend auf DaveKs Antwort habe ich eine Steuerungserweiterung erstellt:

public static void SetToolTip(this Control control, string txt)
{
    new ToolTip().SetToolTip(control, txt);
}

Anschließend können Sie den Tooltip für jedes Steuerelement mit einer einzelnen Zeile festlegen:

this.MyButton.SetToolTip("Hello world");
The_Black_Smurf
quelle
-4

Sicher, behandeln Sie einfach das Mousehover-Ereignis und weisen Sie es an, einen Tooltip anzuzeigen. t ist ein Tooltip, der entweder in den Globals oder im Konstruktor definiert wird mit:

ToolTip t = new ToolTip();

dann der Event-Handler:

private void control_MouseHover(object sender, EventArgs e)
{
  t.Show("Text", (Control)sender);
}
Braten
quelle
2
Ich denke, Sie wurden abgewählt, weil dies nicht die Möglichkeit ist, ToolTip-Steuerelemente in Windows Forms zu verwenden. Sie benötigen nur ein solches Steuerelement im Formular und es werden die Tipps für alle Steuerelemente angezeigt. Siehe Code in den anderen Antworten.
Julian Melville
1
Ich denke, die Erklärung stimmt nicht mit dem Code überein. In der Erklärung, die ich gesagt habe, wird sie angezeigt, und im Code habe ich sie ebenfalls initialisiert. Mein Fehler. : P
Fry
2
@ julianz Eigentlich funktioniert dies gut, wenn Sie spezielle Tooltips haben, die je nach Status dynamisch sein können (abzüglich natürlich der Erstellung - verzeihen Sie mir, ich habe nur versucht, alles in einen Block zu packen.) Wie bei anderen Antworten auf a ähnliche Ader ... yshuditelu und Dylan Beattie waren ähnlich, wenn auch ohne die Instanziierung.
Fry