Comment afficher une info-bulle sur un bouton à l'aide de Windows Forms ?
Comment afficher une info-bulle sur un bouton à l'aide de Windows Forms ?
Réponses:
L'info-bulle est en fait un contrôle WinForms qui gère l'affichage des info-bulles pour plusieurs éléments sur un même formulaire.
Supposons que votre bouton s'appelle MyButton.
L'info-bulle apparaît automatiquement lorsque le curseur survole le bouton, mais si vous devez l'afficher par programme, appelez
MyToolTip.Show("Tooltip text goes here", MyButton)
dans votre code pour afficher l'info-bulle, et MyToolTip.Hide (MyButton) pour le faire disparaître à nouveau.
Utilisation du concepteur de formulaires:
Vous pouvez également définir l'info-bulle par programmation en utilisant l'appel suivant:
this.toolTip1.SetToolTip(this.targetControl, "My Tool Tip");
Vous pouvez utiliser la classe ToolTip:
Création d'une info-bulle pour un contrôle
Exemple:
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");
Pour l'infobulle par défaut, cela peut être utilisé -
System.Windows.Forms.ToolTip ToolTip1 = new System.Windows.Forms.ToolTip();
ToolTip1.SetToolTip(this.textBox1, "Hello world");
Une info-bulle personnalisée peut également être utilisée dans le cas où un formatage est requis pour le message d'info-bulle. Cela peut être créé en mettant en forme le formulaire personnalisé et en l'utilisant comme boîte de dialogue d'info-bulle sur l'événement de survol de la souris du contrôle. Veuillez vérifier le lien suivant pour plus de détails -
http://newapputil.blogspot.in/2015/08/create-custom-tooltip-dialog-from-form.html
Stockage de texte paresseux et compact dans la propriété Tag
Si vous êtes un peu paresseux et n'utilisez pas la propriété Tag des contrôles pour autre chose, vous pouvez l'utiliser pour stocker le texte de l'info-bulle et affecter des gestionnaires d' événements MouseHover à tous ces contrôles en une seule fois comme ceci:
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());
});
}
}
}
Dans ce cas, tous les boutons ayant une chaîne dans la propriété Tag reçoivent un événement MouseHover . Pour le garder compact, l' événement MouseHover est défini en ligne à l'aide d'une expression lambda. Dans l'éventualité où le bouton plané aura son balise texte attribué à l'info - bulle et affiché.
Le framework .NET fournit une classe ToolTip. Ajoutez-en un à votre formulaire, puis lors de l'événement MouseHover pour chaque élément pour lequel vous souhaitez une info-bulle, procédez comme suit:
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");
}
Sur la base de la réponse de DaveK , j'ai créé une extension de contrôle:
public static void SetToolTip(this Control control, string txt)
{
new ToolTip().SetToolTip(control, txt);
}
Ensuite, vous pouvez définir l'info-bulle pour n'importe quel contrôle avec une seule ligne:
this.MyButton.SetToolTip("Hello world");
Bien sûr, il suffit de gérer l'événement mousehover et de lui indiquer d'afficher une info-bulle. t est une info-bulle définie soit dans les globales, soit dans le constructeur en utilisant:
ToolTip t = new ToolTip();
puis le gestionnaire d'événements:
private void control_MouseHover(object sender, EventArgs e)
{
t.Show("Text", (Control)sender);
}