Wie kann ich einem Label in C # Winforms einen Hinweis oder Tooltip hinzufügen?


Antworten:


111

Sie müssen ToolTipIhrem Formular zuerst ein Steuerelement hinzufügen . Anschließend können Sie den Text festlegen, der für andere Steuerelemente angezeigt werden soll.

Hier ist ein Screenshot, der den Designer nach dem Hinzufügen eines ToolTipSteuerelements mit dem Namen zeigt toolTip1:

Geben Sie hier die Bildbeschreibung ein


19
Wow, das scheint verworren / eingängig zu sein, Yuck.
— B. Clay Shannon

@ ClayShannon In gewisser Weise ist es wohl so. Aber das Design ist etwas elegant. Einige Steuerelemente möchten niemals QuickInfos. Auf diese Weise kann sich das ToolTipSteuerelement einfach für Mouse-Over-Ereignisse registrieren und je nach ausgelöstem Ereignis den richtigen Text anzeigen. Dies alles geschieht im Hintergrund.
— Yuck

1
Genau. Außerdem können Sie dasselbe Tooltip-Steuerelement für mehrere Steuerelemente verwenden.
— Mark Ainsworth

@ MarkAinsworth, da ein Kommentar besagt, dass es gut und einer schlecht ist, geben Sie vielleicht an, ob Sie zustimmen, dass es gut oder schlecht ist? . Ich nehme an, Sie sagen, Sie stimmen zu, dass es gut ist.
— Barlop

Ich denke, dies ist ein schlechtes Design, da es nur einen statischen Tooltip unterstützt. Wie würden Sie den Tooltip zur Laufzeit aktualisieren?
— Arvo Bowen

89
yourToolTip = new ToolTip();
//The below are optional, of course,

yourToolTip.ToolTipIcon = ToolTipIcon.Info;
yourToolTip.IsBalloon = true;
yourToolTip.ShowAlways = true;

yourToolTip.SetToolTip(lblYourLabel,"Oooh, you put your mouse over me.");

Vergessen Sie nicht, den Tooltip zu entsorgen, wenn Sie dies bei jedem Mouseover häufig tun. Sie verlieren Handles, bis der GC den Finalizer für die älteren Tooltips aufruft.
— Drake7707

21
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip( Label1, "Label for Label1");

15

nur ein anderer Weg, es zu tun.

Label lbl = new Label();
new ToolTip().SetToolTip(lbl, "tooltip text here");

5

Nur um meine Idee zu teilen ...

Ich habe eine benutzerdefinierte Klasse erstellt, um die Label-Klasse zu erben. Ich habe eine private Variable hinzugefügt, die als Tooltip-Klasse und als öffentliche Eigenschaft TooltipText zugewiesen ist. Dann gab es eine MouseEnter-Delegatenmethode. Dies ist eine einfache Möglichkeit, mit mehreren Label-Steuerelementen zu arbeiten, ohne sich um die Zuweisung Ihres Tooltip-Steuerelements für jedes Label-Steuerelement kümmern zu müssen.

    public partial class ucLabel : Label
    {
        private ToolTip _tt = new ToolTip();

        public string TooltipText { get; set; }

        public ucLabel() : base() {
            _tt.AutoPopDelay = 1500;
            _tt.InitialDelay = 400;
//            _tt.IsBalloon = true;
            _tt.UseAnimation = true;
            _tt.UseFading = true;
            _tt.Active = true;
            this.MouseEnter += new EventHandler(this.ucLabel_MouseEnter);
        }

        private void ucLabel_MouseEnter(object sender, EventArgs ea)
        {
            if (!string.IsNullOrEmpty(this.TooltipText))
            {
                _tt.SetToolTip(this, this.TooltipText);
                _tt.Show(this.TooltipText, this.Parent);
            }
        }
    }

Weisen Sie in der InitializeComponent-Methode des Formular- oder Benutzersteuerelements (dem Designer-Code) Ihr Label-Steuerelement der benutzerdefinierten Klasse neu zu:

this.lblMyLabel = new ucLabel();

Ändern Sie auch die Referenz für private Variablen im Designer-Code:

private ucLabel lblMyLabel;

Aber wird Designer-Code nicht jedes Mal neu generiert, wenn der Benutzer mit Form Visual Designer etwas ändert?
— Robert Synoradzki
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.