Отображение всплывающей подсказки над кнопкой с помощью Windows Forms


Ответы:


222

ToolTip на самом деле является элементом управления WinForms, который обрабатывает отображение подсказок для нескольких элементов в одной форме.

Скажите, что ваша кнопка называется MyButton.

  1. Добавьте элемент управления ToolTip (в разделе «Общие элементы управления» на панели инструментов Windows Forms) в форму.
  2. Дай ему имя - скажи MyToolTip
  3. Установите для свойства «Подсказка на MyToolTip» MyButton (в разделе «Разное» в сетке свойств кнопки) текст, который должен отображаться при наведении на него курсора.

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

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

в вашем коде, чтобы показать всплывающую подсказку, и MyToolTip.Hide (MyButton), чтобы она снова исчезла.


хорошо, но вопрос: если у меня есть более одной кнопки в форме, мне нужно больше всплывающей подсказки, или я могу установить несколько описаний и кнопок для одной подсказки?
гибоз

8
Ваша форма нуждается только в одном элементе управления ToolTip - каждая кнопка может иметь различный текст справки (именно поэтому «Tooltip on MyToolTip» является свойством связанного элемента управления, а не самого элемента управления ToolTip)
Dylan Beattie,

2
В простейшем случае лучше всего добавить подсказку в форму. Проблема: во время разработки пользовательского элемента управления у вас нет ссылки на родительскую форму. Решение: создайте объект всплывающей подсказки в элементе управления. Не думайте, что объект ToolTip обязательно прикреплен к форме.
Стефан Гуричон

93

Использование дизайнера форм:

  • Перетащите элемент управления ToolTip из панели инструментов на форму.
  • Выберите свойства элемента управления, на котором должна отображаться подсказка.
  • Найдите свойство ToolTip on toolTip1 (имя может не быть toolTip1, если вы изменили его имя по умолчанию).
  • Установите текст свойства в текст подсказки, который вы хотите отобразить.

Вы также можете установить подсказку программно, используя следующий вызов:

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

45

Вы можете использовать класс ToolTip:

Создание всплывающей подсказки для элемента управления

Пример:

private void Form1_Load(object sender, System.EventArgs e)
{
    System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
    ToolTip1.SetToolTip(this.Button1, "Hello");
}

1
Это идеальное решение, поскольку оно напрямую интегрируется с автоматически генерируемым кодом VS. Спасибо :)
anon58192932

@DaveK Спасибо. Лучше так, потому что я могу определить все подсказки в одном месте
fedeteka

Спасибо. Лучший и самый простой ответ на этот вопрос.
Наджиб

Еще короче:new ToolTip().SetToolTip(this.Button1, "Hello");
The_Black_Smurf

6

Для всплывающей подсказки по умолчанию это может быть использовано -

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

Настроенная всплывающая подсказка может также использоваться в случае, если для сообщения всплывающей подсказки требуется форматирование. Это может быть создано путем пользовательского форматирования формы и использования его в качестве всплывающей подсказки при наведении курсора мыши на элемент управления. Пожалуйста, проверьте следующую ссылку для более подробной информации -

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


5

Ленивое и компактное хранение текста в свойстве Tag

Если вы немного ленивы и не используете свойство Tag элементов управления для чего-либо еще, вы можете использовать его для хранения текста всплывающей подсказки и назначить обработчики событий MouseHover всем таким элементам управления за один раз:

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

В этом случае всем кнопкам, имеющим строку в свойстве Tag, назначается событие MouseHover . Чтобы сохранить его компактность, событие MouseHover определяется внутри строки с помощью лямбда-выражения. В случае , если какая - либо кнопка парила будет иметь свой тег текст , назначенный на подсказку и показан на рисунке.


4

.NET Framework предоставляет класс ToolTip. Добавьте один из них в форму, а затем в событии MouseHover для каждого элемента, для которого вы хотите всплывающую подсказку, сделайте что-то вроде следующего:

    private void checkBox1_MouseHover(object sender, EventArgs e)
    {
        toolTip1.Show("text", checkBox1);
    }

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

4
Хотя этот фрагмент кода может решить вопрос, в том числе объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код.
18:30

0

Основываясь на ответе DaveK , я создал контрольное расширение:

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

Затем вы можете установить всплывающую подсказку для любого элемента управления одной строкой:

this.MyButton.SetToolTip("Hello world");

-4

Конечно, просто обработайте событие mousehover и попросите его показать подсказку. t это всплывающая подсказка, определенная либо в глобальных переменных, либо в конструкторе с использованием:

ToolTip t = new ToolTip();

тогда обработчик события:

private void control_MouseHover(object sender, EventArgs e)
{
  t.Show("Text", (Control)sender);
}

2
Я думаю, что вам отказали, потому что это не способ использовать элементы управления всплывающей подсказки в Windows Forms. Вам нужен только один такой элемент управления в форме, и он показывает советы для всех элементов управления. Смотрите код в других ответах.
Джулиан Мелвилл

1
Я предполагаю, что объяснение не соответствует коду, где в объяснении, которое я сказал, отображают его и в коде, которое я инициализировал. Виноват. : P
Фрай

2
@ julianz На самом деле, это хорошо работает для специализированных подсказок, которые могут быть динамическими, если вы хотите в зависимости от состояния (минус, конечно, создание - простите, я просто пытался уместить все это в один блок.) Что касается других ответов на похожая вена ... ишудитель и Дилан Битти были похожи, хотя и без инстанциирования.
Фрай
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.