Як додати ToolTip до елемента керування?


154

У мене є кілька елементів управління, які я хотів би показати ToolTip коли миша нависає на ньому. Як я можу це зробити? Я хотів би знати, як це зробити правильно в коді, але також і в дизайнері (Є ToolTipкомпонент в панелі інструментів, але я не зовсім .. зрозумію).

Я не був би здивований, якщо це дублікат, але я можу знайти лише питання, які стосуються більш просунутих конкретних сценаріїв. Я хотів би знати основи.



Пов’язані та старіші досі (стосується .NET взагалі): stackoverflow.com/questions/168550/…
Крістофер Кайл Хортон

Відповіді:


208

Ось ваша стаття для роботи з кодом

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

3
Тож я гадаю, що не має значення, чи toolTip1змінна випадає із сфери застосування?
Свиш

1
Що з однією статикою ToolTipдля всіх ваших форм?
Свиш

7
Він буде звільнений, як тільки стане невідповідним, чого б не було, оскільки кнопка та прапорець все-таки посилаються на нього
Rowland Shaw

2
Вони посилаються на це, оскільки "SetToolTip" додає EventHandlers до подій кнопки та прапорця
Едуардо Вада

3
Я думаю, що це погана ідея ставити підказку в статичну змінну. Що робити, якщо Форму закрити і знову відкрити? Чи знову буде працювати SetTooltip? І якщо так, чи залишаться обробники закритої форми пам'яті або видаляються правильно? Я навіть не витратив ні хвилини на тестування цього. Використовуйте замість змінної члена - ось куленепробивна!
Елмуе

138

Перетягніть елемент керування підказкою з панелі інструментів на форму. Вам не потрібно давати йому властивості, крім імені. Потім у властивостях елемента управління, на якому ви хочете ввімкнути підказку, знайдіть нову властивість із назвою щойно доданого вами елемента підказки. Він за замовчуванням надасть підказку, коли курсор наводить елемент управління.


54
Переконайтесь, що коли ви робите це (наприклад, о 2 ранку), ви використовуєте інструмент ToolTip, а не елемент ToolStrip.
Адріан К

2
З цією відповіддю додавання лише однієї підказки до форми виграми дає всі елементи керування у формі власної підказки.
SAm

Потужна своєю простотою, просто переконайтеся, що ви кинете його на правильне управління, а не на поруч (наприклад, о 2 ранку).
Майкл Стімсон,

40
  1. Додайте до форми компонент ToolTip
  2. Виберіть один із елементів керування, для яких потрібна підказка інструмента
  3. Відкрийте сітку властивостей ( F4), у списку ви знайдете властивість під назвою "ToolTip on toolTip1" (або щось подібне). Встановіть потрібний текст підказки для цієї властивості.
  4. Повторіть 2-3 для інших елементів керування
  5. Зроблено.

Хитрість тут полягає в тому, що контроль ToolTip - це елемент управління розширенням, а це означає, що він розширить набір властивостей для інших елементів управління у формі. За лаштунками це досягається шляхом генерування коду, як у відповіді Світлозара. Існують і інші елементи керування, що працюють таким же чином (як HelpProvider).


1
Отже, ви можете використовувати один і той же ToolTip для багатьох елементів керування з різними текстами?
Свиш

@Svish: так, це є метою управління розширювачами.
Фредрік Морк

Чи можна використовувати також перехресні контролери користувачів та форми? Як якщо б ви створили статичний ToolTip зі своїми стандартними значеннями властивостей. Або це вважатиметься поганою практикою?
Свиш

Я ніколи не пробував цього, і не дуже знаю внутрішню роботу ToolTip, але оскільки він отримує посилання на елемент управління, з яким пов'язаний текст, я думаю, що це могло б працювати. Лише один спосіб дізнатися; спробуйте: o)
Фредрік Мьорк

Ну, я, очевидно, спробую це. Але я не особливо добре знаходжу такі речі, як витоки пам'яті та подібні ... І якщо це призведе до витоку пам’яті чи чогось подібного, я б хотів знати, хе-хе.
Свиш

8

ToolTip в C # дуже легко додати майже до всіх елементів управління інтерфейсом. Для цього вам не потрібно додавати жодної події MouseHover.

Ось як це зробити -

  1. Додайте до форми об’єкт ToolTip. Одного об’єкта достатньо для всієї форми. ToolTip toolTip = new ToolTip();

  2. Додайте елемент керування до підказки з потрібним текстом.

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


1

Я зробив це таким чином: просто додайте подію до будь-якого елемента управління, встановіть тег управління та додайте умовне для обробки підказки для відповідного елемента керування / тегу.

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

-3

Просто підпишіться на подія ToolTipTextNeeded управління та поверніть e.TooltipText набагато простіше.


6
Я не думаю, що це стандартна подія управління WinForm.
Dan7
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.