Как отобразить всплывающую подсказку над кнопкой с помощью Windows Forms ?
Как отобразить всплывающую подсказку над кнопкой с помощью Windows Forms ?
Ответы:
ToolTip на самом деле является элементом управления WinForms, который обрабатывает отображение подсказок для нескольких элементов в одной форме.
Скажите, что ваша кнопка называется MyButton.
Всплывающая подсказка автоматически появляется, когда курсор находится над кнопкой, но если вам нужно отобразить ее программно, вызовите
MyToolTip.Show("Tooltip text goes here", MyButton)
в вашем коде, чтобы показать всплывающую подсказку, и MyToolTip.Hide (MyButton), чтобы она снова исчезла.
Использование дизайнера форм:
Вы также можете установить подсказку программно, используя следующий вызов:
this.toolTip1.SetToolTip(this.targetControl, "My Tool Tip");
Вы можете использовать класс 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");
}
new ToolTip().SetToolTip(this.Button1, "Hello");
Для всплывающей подсказки по умолчанию это может быть использовано -
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
Ленивое и компактное хранение текста в свойстве 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 определяется внутри строки с помощью лямбда-выражения. В случае , если какая - либо кнопка парила будет иметь свой тег текст , назначенный на подсказку и показан на рисунке.
.NET Framework предоставляет класс ToolTip. Добавьте один из них в форму, а затем в событии MouseHover для каждого элемента, для которого вы хотите всплывающую подсказку, сделайте что-то вроде следующего:
private void checkBox1_MouseHover(object sender, EventArgs e)
{
toolTip1.Show("text", checkBox1);
}
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");
}
Основываясь на ответе DaveK , я создал контрольное расширение:
public static void SetToolTip(this Control control, string txt)
{
new ToolTip().SetToolTip(control, txt);
}
Затем вы можете установить всплывающую подсказку для любого элемента управления одной строкой:
this.MyButton.SetToolTip("Hello world");
Конечно, просто обработайте событие mousehover и попросите его показать подсказку. t это всплывающая подсказка, определенная либо в глобальных переменных, либо в конструкторе с использованием:
ToolTip t = new ToolTip();
тогда обработчик события:
private void control_MouseHover(object sender, EventArgs e)
{
t.Show("Text", (Control)sender);
}