Як я можу додати підказку або підказку до мітки в C # Winforms?


81

Здається, що Labelне має Hintабо ToolTipабо Hovertextвластивості. Отже, який найкращий метод показувати підказку, підказку чи текст наведення, коли до Labelнього звертається миша?


Відповіді:


113

ToolTipСпочатку потрібно додати елемент керування у форму. Тоді ви можете встановити текст, який він повинен відображати для інших елементів керування.

Ось знімок екрана, що показує дизайнера після додавання елемента ToolTipкерування, який називається toolTip1:

введіть тут опис зображення


20
Ого, це здається заплутаним / нерозумним, Юк.
Б. Клей Шеннон,

@ClayShannon Певним чином, я вважаю, що це так. Але дизайн дещо елегантний. Деякі органи управління ніколи не хочуть підказок інструментів. Таким чином, ToolTipелемент керування може просто зареєструватися для наведення курсора на події та відобразити відповідний текст залежно від піднятої події. Все це відбувається у фоновому режимі.
Yuck

1
Я згоден. Це також дозволяє використовувати один і той же елемент підказки для декількох елементів керування.
Марк Ейнсворт

@MarkAinsworth, оскільки один коментар каже, що це добре, а той, що це погано, можливо, ви заявляєте, погоджуєтесь ви з тим, що це добре чи погоджуєтесь, що це погано? . Я припускаю, ти кажеш, що погоджуєшся, що це добре.
Barlop

Я думаю, це поганий дизайн, оскільки він підтримує лише статичну підказку. Як би ви оновили підказку під час виконання?
Арво Боуен,

91
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.");

Не забудьте утилізувати підказку, якщо ви багато разів робите це під час кожного наведення курсора, ви будете просочувати ручки, поки GC не викличе фіналізатор на старих підказках.
drake7707

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

15

просто ще один спосіб зробити це.

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

5

Просто, щоб поділитися своєю ідеєю ...

Я створив власний клас для успадкування класу Label. Я додав приватну змінну, призначену як клас Tooltip, та загальнодоступну властивість TooltipText. Потім надав йому метод делегата MouseEnter. Це простий спосіб працювати з кількома елементами керування мітками, і вам не доведеться турбуватися про призначення вашого підказки для кожного елемента керування мітками.

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

У методі InitializeComponent форми або користувача (код дизайнера) перепризначте елемент керування Label спеціальному класу:

this.lblMyLabel = new ucLabel();

Також змініть посилання на приватну змінну в коді конструктора:

private ucLabel lblMyLabel;

Але чи не відновлюється код Designer щоразу, коли користувач щось змінює за допомогою візуального конструктора форм?
Роберт Синорадзкі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.