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

Yuck
quelle
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.");
Siehe scharf
quelle
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");
scibuff
quelle
15

nur ein anderer Weg, es zu tun.

Label lbl = new Label();
new ToolTip().SetToolTip(lbl, "tooltip text here");
ac0de
quelle
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;
cChacon
quelle
Aber wird Designer-Code nicht jedes Mal neu generiert, wenn der Benutzer mit Form Visual Designer etwas ändert?
Robert Synoradzki